За генериране на уникални и произволно изглеждащи идентификатори от сериал, използването на шифри може да е добра идея. Тъй като техният изход е биективен (има съпоставяне едно към едно между входни и изходни стойности) -- вие няма да имате никакви сблъсъци , за разлика от хешовете. Което означава, че вашите идентификатори не трябва да са толкова дълги, колкото хешовете.
Повечето криптографски шифри работят върху 64-битови или по-големи блокове, но PostgreSQL wiki има примерна PL/pgSQL процедура за "некриптографски" шифър
функция, която работи на (32-битов) int
Тип. Отказ от отговорност:Не съм опитвал да използвам тази функция лично.
За да го използвате за вашите първични ключове, изпълнете извикването CREATE FUNCTION от wiki страницата и след това на вашия празен таблиците правят:
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)