Użyj uuid
. PostgreSQL nie bez powodu ma typ natywny.
Przechowuje uuid wewnętrznie jako 128-bitowe pole binarne. Inne proponowane opcje przechowują je w postaci szesnastkowej, co w porównaniu jest bardzo nieefektywne.
Nie tylko to, ale:
-
uuid
wykonuje proste sortowanie bajtów w celu porządkowania.text
,char
ivarchar
rozważ sortowanie i ustawienia regionalne, co jest bezsensowne dla uuid. -
Jest tylko jedna reprezentacja kanoniczna
uuid
. To samo nie dotyczy tekstu itp.; musisz wziąć pod uwagę duże i małe litery szesnastkowe, obecność lub brak{...-...}
itd.
Po prostu nie ma wątpliwości. Użyj uuid
.
Jedynym innym typem, który ma sens, jest bytea
, który przynajmniej może być użyty do bezpośredniego przechowywania 16 bajtów identyfikatora uuid. To właśnie zrobiłbym, gdybym używał systemów, które nie radzą sobie z typami danych spoza podstawowego zestawu, jak jakiś naprawdę głupi ORM.