PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment spécifier une liste de valeurs pour une séquence postgresql

Pourrait fonctionner comme ceci :

-- 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'));

Points majeurs :

1) Créez une table de recherche avec deux nombres
- seq_id compte à partir de 1 et votre clé primaire.
- id est vos nombres en séquence (j'ai remplacé des nombres aléatoires ici).
2) Créez une séquence d'aide.
3) Obtenez vos nombres avec un SELECT comme ci-dessus.
Vous avez besoin de la sous-sélection, ou de tous les valeurs seront renvoyées immédiatement.

Cette solution donne toute la sécurité nextval() a à offrir pour la concurrence.
Créez un index unique sur priv_id(id) si vous voulez vous assurer que vos identifiants personnalisés sont uniques.