Utilisez uuid
. PostgreSQL a le type natif pour une raison.
Il stocke l'uuid en interne sous la forme d'un champ binaire de 128 bits. Vos autres options proposées le stockent en hexadécimal, ce qui est très inefficace en comparaison.
Non seulement cela, mais :
-
uuid
effectue un simple tri par octet pour le classement.text
,char
etvarchar
considérez les classements et les paramètres régionaux, ce qui n'a aucun sens pour un uuid. -
Il n'y a qu'une seule représentation canonique d'un
uuid
. Il n'en va pas de même pour le texte, etc. vous devez considérer l'hexagone majuscule vs minuscule, la présence ou l'absence de{...-...}
etc.
Il n'y a aucun doute. Utilisez uuid
.
Le seul autre type qui a du sens est bytea
, qui au moins peut être utilisé pour stocker directement les 16 octets de l'uuid. C'est ce que je ferais si j'utilisais des systèmes qui ne pouvaient pas gérer les types de données en dehors de l'ensemble de base, comme un ORM vraiment stupide.