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