Snel en zonder dynamische SQL
Cast de eerste 16 hexadecimale cijfers van een UUID in tekstweergave als bitstring bit(64)
en cast dat naar bigint
. Zie:
Handig is dat overtollige hexadecimale cijfers aan de rechterkant worden afgekapt in de cast naar bit(64)
automatisch - precies wat we nodig hebben.
Postgres accepteert verschillende invoerformaten. De door jou opgegeven letterlijke tekenreeks is er een van:
14607158d3b14ac0b0d82a9a5a9e8f6e
De standaard tekstweergave van een UUID (en de text
uitvoer in Postgres voor gegevenstype uuid
) voegt koppeltekens toe op vooraf gedefinieerde plaatsen:
14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e
Als het invoerformaat kan variëren, verwijder dan voor de zekerheid eerst de koppeltekens:
SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;
Actuele cast uuid
invoer met uuid::text
.
db<>fiddle hier
Merk op dat Postgres ondertekend . gebruikt geheel getal, dus de bigint
loopt over naar negatieve getallen in de bovenste helft - wat voor dit doel niet relevant zou moeten zijn.
DB-ontwerp
Voeg indien mogelijk een bigserial
kolom naar de onderliggende tabel en gebruik die in plaats daarvan.