Använd uuid
. PostgreSQL har den ursprungliga typen av en anledning.
Den lagrar uuid internt som ett 128-bitars binärt fält. Dina andra föreslagna alternativ lagrar den som hexadecimal, vilket är mycket ineffektivt i jämförelse.
Inte bara det, utan:
-
uuid
gör en enkel bytevis sortering för beställning.text
,char
ochvarchar
överväg sammanställningar och lokaler, vilket är meningslöst för en uuid. -
Det finns bara en kanonisk representation av en
uuid
. Detsamma gäller inte för text etc; du måste överväga hexadecimal versus gemener, närvaro eller frånvaro av{...-...}
s etc.
Det är bara ingen fråga. Använd uuid
.
Den enda andra typen som är vettig är bytea
, som åtminstone kan användas för att lagra de 16 byten av uuid direkt. Det här är vad jag skulle göra om jag använde system som inte kunde hantera datatyper utanför grunduppsättningen, som en riktigt dum ORM av något slag.