Cepat dan tanpa SQL dinamis
Keluarkan 16 digit hex utama UUID dalam representasi teks sebagai bitstring bit(64)
dan berikan itu ke bigint . Lihat:
Mudahnya, kelebihan digit heksadesimal di sebelah kanan akan terpotong di cast ke bit(64) secara otomatis - persis seperti yang kami butuhkan.
Postgres menerima berbagai format untuk input. Literal string yang Anda berikan adalah salah satunya:
14607158d3b14ac0b0d82a9a5a9e8f6e
Representasi teks default dari UUID (dan text output di Postgres untuk tipe data uuid ) menambahkan tanda hubung di tempat yang telah ditentukan:
14607158-d3b1-4ac0-b0d8-2a9a5a9e8f6e
Jika format input dapat bervariasi, hapus tanda hubung terlebih dahulu untuk memastikan:
SELECT ('x' || translate(uuid_as_string, '-', ''))::bit(64)::bigint;
Transmisikan uuid yang sebenarnya
masukan dengan uuid::text .
db<>fiddle di sini
Perhatikan bahwa Postgres menggunakan ditandatangani integer, jadi bigint meluap ke angka negatif di bagian atas - yang seharusnya tidak relevan untuk tujuan ini.
Desain DB
Jika memungkinkan, tambahkan bigserial
kolom ke tabel di bawahnya dan gunakan itu sebagai gantinya.