Veloce e senza SQL dinamico
Trasmetti le 16 cifre esadecimali iniziali di un UUID nella rappresentazione testuale come bitstring bit(64)
e lancialo su bigint
. Vedi:
Convenientemente, le cifre esadecimali in eccesso a destra vengono troncate nel cast su bit(64)
automaticamente - esattamente ciò di cui abbiamo bisogno.
Postgres accetta vari formati per l'input. La tua stringa letterale data è una di queste:
14607158d3b14ac0b0d82a9a5a9e8f6e
La rappresentazione testuale predefinita di un UUID (e il text
output in Postgres per il tipo di dati uuid
) aggiunge trattini in posizioni predefinite:
14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e
Se il formato di input può variare, elimina prima i trattini per essere sicuro:
SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;
Trasmetti uuid
inserisci con uuid::text
.
db<>violino qui
Tieni presente che Postgres utilizza firmato intero, quindi bigint
overflow in numeri negativi nella metà superiore, il che dovrebbe essere irrilevante per questo scopo.
Progettazione DB
Se possibile, aggiungi un bigserial
colonna alla tabella sottostante e usala al suo posto.