Verwenden Sie uuid
. PostgreSQL hat den nativen Typ aus einem bestimmten Grund.
Es speichert die UUID intern als 128-Bit-Binärfeld. Ihre anderen vorgeschlagenen Optionen speichern sie als hexadezimal, was im Vergleich sehr ineffizient ist.
Nicht nur das, sondern:
uuid
macht eine einfache byteweise Art für die Bestellung. text
, char
und varchar
berücksichtigen Sie Kollationen und Gebietsschemata, was für eine UUID unsinnig ist.
Es gibt nur eine kanonische Darstellung eines uuid
. Das gleiche gilt nicht für Text usw.; Sie müssen gegen kleingeschrieben hex, Vorhandensein oder Fehlen von {...-...}
s usw.
Es gibt einfach keine Frage obere betrachten. Verwenden Sie uuid
.
Der einzige andere Typ, der einen Sinn ergibt, ist bytea
, die zumindest verwendet werden kann, um die 16 Bytes der UUID direkt zu speichern. Dies würde ich tun, wenn ich Systeme verwenden würde, die mit Datentypen außerhalb des Basissatzes nicht umgehen können, wie ein wirklich dummer ORM irgendeiner Art.
Soweit mir bekannt ist, verwendet der UUID-Typ 16 Bytes und speichert im Grunde die UUID als was es ist: eine 128-Bit-Ganzzahl. Ein 'char (36)' oder 'varchar (36)' würde 36 Bytes verwenden. Ich kann jedoch nicht mehr finden, wo das dokumentiert ist. Darüber hinaus müssen Sie wissen, welche Auswirkungen PostgreSQL auf das Tabellen/Index-Clustering hat, wenn Ihre UUID Ihr Schlüssel ist und Sie die CLUSTER-Option verwenden möchten. –
http://simononsoftware.com/how-to-store-uuids-in-postgresql/ –