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 :
-
uuideffectue un simple tri par octet pour le classement.text,charetvarcharconsidé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.