Szybko i bez dynamicznego SQL
Rzuć pierwsze 16 cyfr szesnastkowych identyfikatora UUID w reprezentacji tekstowej jako bitstring bit(64)
i prześlij to do bigint
. Zobacz:
Dogodnie nadmiar cyfr szesnastkowych po prawej stronie jest obcięty w rzucie na bit(64)
automatycznie - dokładnie to, czego potrzebujemy.
Postgres akceptuje różne formaty danych wejściowych. Twój podany literał ciągu jest jednym z nich:
14607158d3b14ac0b0d82a9a5a9e8f6e
Domyślna tekstowa reprezentacja UUID (i text
dane wyjściowe w Postgresie dla typu danych uuid
) dodaje myślniki we wstępnie zdefiniowanych miejscach:
14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e
Jeśli format wejściowy może się różnić, najpierw usuń myślniki, aby się upewnić:
SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;
Przesyłaj rzeczywiste uuid
wprowadź z uuid::text
.
db<>fiddle tutaj
Pamiętaj, że Postgres używa znaku podpisanego liczba całkowita, więc bigint
przepełnienia do liczb ujemnych w górnej połowie - co powinno być nieistotne w tym celu.
Projekt bazy danych
Jeśli to możliwe, dodaj bigserial
kolumny do tabeli bazowej i użyj jej zamiast tego.