sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo especificar una lista de valores para una secuencia postgresql

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.