Podría funcionar así:
-- 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'));
Puntos principales:
1) Cree una tabla de búsqueda con dos números
- seq_id
cuenta desde 1 y su clave principal.
- id
son sus números en secuencia (sustituí números aleatorios aquí).
2) Cree una secuencia auxiliar.
3) Obtenga sus números con SELECCIONAR como arriba.
Necesita la subselección, o todas los valores se devolverán a la vez.
Esta solución brinda toda la seguridad nextval()
tiene para ofrecer para la concurrencia.
Cree un índice único en priv_id(id) si quiere asegurarse de que sus ID personalizados sean únicos.