Potrebbe funzionare in questo modo:
-- 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'));
Punti principali:
1) Crea una tabella di ricerca con due numeri
- seq_id
conta da 1 e la tua chiave primaria.
- id
è i tuoi numeri in sequenza (ho sostituito i numeri casuali qui).
2) Crea una sequenza di supporto.
3) Ottieni i tuoi numeri con un SELECT come sopra.
È necessario il subselect o tutti i valori verranno restituiti immediatamente.
Questa soluzione offre tutta la sicurezza nextval()
ha da offrire per la concorrenza.
Crea un indice univoco su priv_id(id) se vuoi assicurarti che i tuoi ID personalizzati siano univoci.