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)