Snabbt och utan dynamisk SQL
Kasta de inledande 16 hexadecimala siffrorna i ett UUID i textrepresentation som bitsträng bit(64)
och casta det till bigint
. Se:
Lämpligen är överskjutande hexadecimala siffror till höger trunkerade i casten till bit(64)
automatiskt - precis vad vi behöver.
Postgres accepterar olika format för inmatning. Din givna sträng bokstavlig är en av dem:
14607158d3b14ac0b0d82a9a5a9e8f6e
Standardtextrepresentationen av ett UUID (och text
). utdata i Postgres för datatyp uuid
) lägger till bindestreck på fördefinierade platser:
14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e
Om inmatningsformatet kan variera, ta bort bindestreck först för att vara säker:
SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;
Cast faktiska uuid
in med uuid::text
.
db<>fiol här
Observera att Postgres använder signerad heltal, så bigint
svämmar över till negativa tal i den övre halvan - vilket borde vara irrelevant för detta ändamål.
DB-design
Om det alls är möjligt lägg till en bigserial
kolumnen till den underliggande tabellen och använd den istället.