Използвайте uuid
. PostgreSQL има родния тип по някаква причина.
Той съхранява uuid вътрешно като 128-битово двоично поле. Другите ви предложени опции го съхраняват като шестнадесетичен, което е много неефективно в сравнение.
Не само това, но и:
-
uuid
прави просто сортиране по байтове за подреждане.text
,char
иvarchar
вземете под внимание сортирането и локалите, което е безсмислено за uuid. -
Има само едно канонично представяне на
uuid
. Същото не важи за текст и т.н.; трябва да вземете предвид главни срещу малки шестнадесетични букви, наличие или отсъствие на{...-...}
s и т.н.
Просто няма въпрос. Използвайте uuid
.
Единственият друг тип, който има някакъв смисъл, е bytea
, който поне може да се използва за директно съхраняване на 16-те байта на uuid. Това бих направил, ако използвах системи, които не могат да се справят с типове данни извън основния набор, като наистина тъпо ORM от някакъв вид.