Skulle kunna fungera så här:
-- 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'));
Huvudpunkter:
1) Skapa en uppslagstabell med två siffror
- seq_id
räknas från 1 och din primära nyckel.
- id
är dina nummer i följd (jag har ersatt slumpmässiga nummer här).
2) Skapa en hjälpsekvens.
3) Få dina nummer med ett SELECT som ovan.
Du behöver undervalet, eller alla värden kommer att returneras på en gång.
Denna lösning ger all säkerhet nextval()
har att erbjuda för samtidighet.
Skapa ett unikt index på priv_id(id) om du vill försäkra dig om att dina anpassade id:n är unika.