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:
-
uuidesegue un semplice ordinamento bytewise per l'ordinamento.text,charevarcharconsidera 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.