Rychle a bez dynamického SQL
Přeneste prvních 16 hexadecimálních číslic UUID do textové reprezentace jako bitstring bit(64)
a přeneste to do bigint
. Viz:
Pohodlně nadbytečné hexadecimální číslice vpravo jsou zkráceny v přetypování na bit(64)
automaticky – přesně to, co potřebujeme.
Postgres přijímá různé formáty pro vstup. Váš daný řetězcový literál je jedním z nich:
14607158d3b14ac0b0d82a9a5a9e8f6e
Výchozí textová reprezentace UUID (a text
výstup v Postgresu pro datový typ uuid
) přidává pomlčky na předdefinovaná místa:
14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e
Pokud se vstupní formát může lišit, pro jistotu nejprve odstraňte pomlčky:
SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;
Odesílat skutečné uuid
zadejte pomocí uuid::text
.
db<>fiddle zde
Všimněte si, že Postgres používá podepsané celé číslo, tedy bigint
přetečení do záporných čísel v horní polovině – což by pro tento účel nemělo být relevantní.
Návrh DB
Pokud je to možné, přidejte bigserial
sloupec do podkladové tabulky a místo toho ji použijte.