Może działać tak:
-- 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'));
Główne punkty:
1) Utwórz tabelę przeglądową z dwoma liczbami
- seq_id
liczy od 1 do klucza podstawowego.
- id
jest sekwencją twoich liczb (podstawiłem tu liczby losowe).
2) Utwórz sekwencję pomocniczą.
3) Uzyskaj swoje liczby za pomocą SELECT jak powyżej.
Potrzebujesz podselekcji lub wszystkich wartości zostaną zwrócone natychmiast.
To rozwiązanie zapewnia wszystkie zabezpieczenia nextval()
ma do zaoferowania dla współbieżności.
Utwórz unikalny indeks na priv_id(id), jeśli chcesz mieć pewność, że Twoje niestandardowe identyfikatory są niepowtarzalne.