Schnell und ohne dynamisches SQL
Wandeln Sie die führenden 16 Hexadezimalziffern einer UUID in Textdarstellung als bitstring bit(64)
und wandeln Sie das in bigint
um . Siehe:
Praktischerweise werden überschüssige Hexadezimalziffern rechts abgeschnitten in der Umwandlung zu bit(64)
automatisch - genau das, was wir brauchen.
Postgres akzeptiert verschiedene Eingabeformate. Ihr gegebenes String-Literal ist eines davon:
14607158d3b14ac0b0d82a9a5a9e8f6e
Die standardmäßige Textdarstellung einer UUID (und der text
Ausgabe in Postgres für den Datentyp uuid
) fügt an vordefinierten Stellen Bindestriche hinzu:
14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e
Wenn das Eingabeformat variieren kann, entfernen Sie zuerst die Bindestriche, um sicherzugehen:
SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;
Cast tatsächliche uuid
Eingabe mit uuid::text
.
db<>fiddle hier
Beachten Sie, dass Postgres signiert verwendet ganze Zahl, also bigint
Überläufe zu negativen Zahlen in der oberen Hälfte - was für diesen Zweck irrelevant sein sollte.
DB-Design
Fügen Sie nach Möglichkeit eine bigserial
-Spalte in die zugrunde liegende Tabelle und verwenden Sie stattdessen diese.