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.