Pro generování jedinečných a náhodně vypadajících identifikátorů ze seriálu může být dobrým nápadem použití šifer. Protože jejich výstup je bijektivní (mezi vstupními a výstupními hodnotami existuje mapování jedna ku jedné) – nedojde k žádným kolizím , na rozdíl od hashů. Což znamená, že vaše identifikátory nemusí být dlouhé jako hash.
Většina kryptografických šifer funguje na 64bitových nebo větších blocích, ale wiki PostgreSQL má ukázkový postup PL/pgSQL pro „nekryptografickou“ šifru
funkce, která funguje na (32bitovém) int
typ. Zřeknutí se odpovědnosti:Sám jsem tuto funkci nezkoušel použít.
Chcete-li jej použít pro primární klíče, spusťte volání CREATE FUNCTION ze stránky wiki a poté na prázdném tabulky dělají:
ALTER TABLE foo ALTER COLUMN foo_id SET DEFAULT pseudo_encrypt(nextval('foo_foo_id_seq')::int);
A voila!
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)