Bisa bekerja seperti ini:
-- DROP SCHEMA x CASCADE;
CREATE SCHEMA x;
CREATE TABLE x.priv_id(seq_id int primary key, id int);
INSERT INTO x.priv_id
SELECT generate_series(1,100,1), (random() * 1000)::int;
CREATE SEQUENCE x.priv_seq;
SELECT id
FROM x.priv_id
WHERE seq_id = (SELECT nextval('x.priv_seq'));
Poin utama:
1) Buat tabel pencarian dengan dua angka
- seq_id
dihitung dari 1 dan kunci utama Anda.
- id
adalah nomor Anda secara berurutan (saya mengganti nomor acak di sini).
2) Buat urutan pembantu.
3) Dapatkan nomor Anda dengan SELECT seperti di atas.
Anda memerlukan subselect, atau semua nilai akan dikembalikan sekaligus.
Solusi ini memberikan semua keamanan nextval()
ditawarkan untuk konkurensi.
Buat indeks unik di priv_id(id) jika Anda ingin memastikan id khusus Anda unik.