Použijte uuid
. PostgreSQL má nativní typ z nějakého důvodu.
Interně ukládá uuid jako 128bitové binární pole. Vaše další navrhované možnosti jej ukládají jako hexadecimální, což je ve srovnání velmi neefektivní.
Nejen to, ale:
-
uuid
provádí jednoduché řazení po byte pro objednávání.text
,char
avarchar
zvažte kolace a národní prostředí, což je pro uuid nesmyslné. -
Existuje pouze jedna kanonická reprezentace
uuid
. Totéž neplatí pro text atd.; musíte vzít v úvahu velká a malá hexadecimální písmena, přítomnost nebo nepřítomnost{...-...}
s atd.
Není tu žádná otázka. Použijte uuid
.
Jediný další typ, který dává smysl, je bytea
, který lze použít alespoň k přímému uložení 16 bajtů uuid. To je to, co bych udělal, kdybych používal systémy, které si neumí poradit s datovými typy mimo základní sadu, jako opravdu hloupé ORM nějakého druhu.