PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como especificar uma lista de valores para uma sequência postgresql


Poderia funcionar assim:
-- 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'));

Pontos principais:


1) Crie uma tabela de pesquisa com dois números
- seq_id está contando a partir de 1 e sua chave primária.
- id são seus números em sequência (eu substituí por números aleatórios aqui).
2) Crie uma sequência auxiliar.
3) Obtenha seus números com um SELECT como acima.
Você precisa da subseleção, ou todos os valores serão devolvidos de uma só vez.

Esta solução oferece toda a segurança nextval() tem a oferecer para simultaneidade.
Crie um índice exclusivo em priv_id(id) se quiser garantir que seus ids personalizados sejam únicos.