Бързо и без динамичен SQL
Преведете водещите 16 шестнадесетични цифри на UUID в текстово представяне като bitstring bit(64)
и прехвърлете това към bigint
. Вижте:
За удобство, излишните шестнадесетични цифри вдясно се съкращават в прехвърлянето към bit(64)
автоматично - точно това, от което се нуждаем.
Postgres приема различни формати за въвеждане. Даденият от вас низов литерал е един от тях:
14607158d3b14ac0b0d82a9a5a9e8f6e
Текстовото представяне по подразбиране на UUID (и text
изход в Postgres за тип данни uuid
) добавя тирета на предварително определени места:
14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e
Ако форматът на въвеждане може да варира, първо премахнете тиретата, за да сте сигурни:
SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;
Предаване на действителен uuid
въвеждане с uuid::text
.
db<>fiddle тук
Имайте предвид, че Postgres използва подписан цяло число, така че bigint
прелива в отрицателни числа в горната половина - което би трябвало да е без значение за тази цел.
Дизайн на DB
Ако изобщо е възможно, добавете bigserial
колона към основната таблица и я използвайте вместо това.