Usa uuid
. PostgreSQL ha il tipo nativo per un motivo.
Memorizza l'uuid internamente come campo binario a 128 bit. Le altre opzioni proposte lo memorizzano come esadecimale, il che è molto inefficiente in confronto.
Non solo, ma:
-
uuid
esegue un semplice ordinamento bytewise per l'ordinamento.text
,char
evarchar
considera le regole di confronto e le impostazioni locali, il che non ha senso per un uuid. -
C'è solo una rappresentazione canonica di un
uuid
. Lo stesso non vale per il testo ecc; devi considerare maiuscolo e minuscolo esadecimale, presenza o assenza di{...-...}
se ecc.
Non ci sono domande. Usa uuid
.
L'unico altro tipo che ha senso è bytea
, che almeno può essere utilizzato per memorizzare direttamente i 16 byte dell'uuid. Questo è ciò che farei se utilizzassi sistemi che non sono in grado di far fronte a tipi di dati al di fuori del set di base, come un ORM davvero stupido di qualche tipo.