PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Buat bilangan bulat besar dari ujung besar uuid di PostgreSQL

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

Manual:

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres tingkat tinggi kehabisan kecepatan INSERT/UPDATE?

  2. Hitungan anotasi Django di JSONField dengan Postgres

  3. Bagaimana Anda menambahkan Driver PostgreSQL sebagai ketergantungan di Maven?

  4. Cara menginstal Gnatcoll Postgres di Linux Centos 7

  5. Permintaan pembaruan sederhana yang lambat pada database PostgreSQL dengan 3 juta baris