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

Mengganti urutan dengan nomor acak

Untuk menghasilkan pengidentifikasi unik dan tampak acak dari serial, menggunakan sandi mungkin merupakan ide yang bagus. Karena keluarannya bersifat bijektif (ada pemetaan satu-ke-satu antara nilai masukan dan keluaran) -- Anda tidak akan mengalami benturan , tidak seperti hash. Artinya, pengenal Anda tidak harus sepanjang hash.

Kebanyakan sandi kriptografi bekerja pada blok 64-bit atau lebih besar, tetapi wiki PostgreSQL memiliki contoh prosedur PL/pgSQL untuk sandi "non-kriptografis" fungsi yang bekerja pada (32-bit) int Tipe. Penafian:Saya sendiri belum mencoba menggunakan fungsi ini.

Untuk menggunakannya sebagai kunci utama Anda, jalankan panggilan CREATE FUNCTION dari halaman wiki, lalu di kosong Anda tabel melakukan:

ALTER TABLE foo ALTER COLUMN foo_id SET DEFAULT pseudo_encrypt(nextval('foo_foo_id_seq')::int);

Dan voila!

pg=> insert into foo (foo_id) values(default);
pg=> insert into foo (foo_id) values(default);
pg=> insert into foo (foo_id) values(default);
pg=> select * from foo;
  foo_id   
------------
 1241588087
 1500453386
 1755259484
(4 rows)


  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 tidak dapat mendengarkan alamat IP tertentu

  2. Menghapus menggunakan LEFT JOIN

  3. Panduan Menggunakan pgBouncer untuk PostgreSQL

  4. php postgres dari kueri ke pengambilan baris secara teori

  5. Tipe Data PostgreSQL dan C#