Може да работи така:
-- 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'));
Основни точки:
1) Създайте справочна таблица с две числа
- seq_id
брои от 1 и вашия първичен ключ.
- id
са вашите числа в последователност (замених произволни числа тук).
2) Създайте помощна последователност.
3) Вземете вашите числа с SELECT като по-горе.
Нуждаете се от подизбора или всички стойностите ще бъдат върнати наведнъж.
Това решение осигурява цялата сигурност nextval()
може да предложи за едновременност.
Създайте уникален индекс на priv_id(id), ако искате да сте сигурни, че персонализираните ви идентификатори са уникални.