このように機能する可能性があります:
-- 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)2つの数値を使用してルックアップテーブルを作成します
-seq_id
1と主キーから数えています。
-id
は順番に並んだ番号です(ここでは乱数を置き換えました)。
2)ヘルパーシーケンスを作成します。
3)上記のようなSELECTを使用して番号を取得します。
副選択、またはすべてが必要です。値はすぐに返されます。
このソリューションは、すべてのセキュリティを nextval()
に提供します。 並行性を提供する必要があります。
カスタムIDが一意であることを確認する場合は、priv_id(id)に一意のインデックスを作成します。