Usa uuid
. PostgreSQL tiene el tipo nativo por una razón.
Almacena el uuid internamente como un campo binario de 128 bits. Sus otras opciones propuestas lo almacenan como hexadecimal, lo cual es muy ineficiente en comparación.
No solo eso, sino que:
-
uuid
hace una ordenación simple por bytes para ordenar.text
,char
yvarchar
considere intercalaciones y configuraciones regionales, lo cual no tiene sentido para un uuid. -
Solo hay una representación canónica de un
uuid
. No ocurre lo mismo con el texto, etc.; debe considerar mayúsculas y minúsculas hexadecimales, presencia o ausencia de{...-...}
etc.
Simplemente no hay duda. Usa uuid
.
El único otro tipo que tiene algún sentido es bytea
, que al menos se puede usar para almacenar los 16 bytes del uuid directamente. Esto es lo que haría si estuviera usando sistemas que no pudieran manejar tipos de datos fuera del conjunto básico, como un ORM realmente tonto de algún tipo.