シリアルから一意でランダムに見える識別子を生成するには、暗号を使用することをお勧めします。それらの出力は全単射であるため(入力値と出力値の間に1対1のマッピングがあります)、衝突は発生しません 、ハッシュとは異なります。つまり、識別子はハッシュほど長くする必要はありません。
ほとんどの暗号化暗号は64ビット以上のブロックで機能しますが、PostgreSQLwikiにはint
で動作する関数 タイプ。免責事項:私はこの機能を自分で使用したことはありません。
主キーに使用するには、WikiページからCREATE FUNCTION呼び出しを実行してから、空で実行します。 テーブルは次のことを行います:
ALTER TABLE foo ALTER COLUMN foo_id SET DEFAULT pseudo_encrypt(nextval('foo_foo_id_seq')::int);
そして出来上がり!
pg=> insert into foo (foo_id) values(default);
pg=> insert into foo (foo_id) values(default);
pg=> insert into foo (foo_id) values(default);
pg=> select * from foo;
foo_id
------------
1241588087
1500453386
1755259484
(4 rows)