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.