PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come specificare un elenco di valori per una sequenza postgresql

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.