Voor het genereren van unieke en willekeurig ogende identifiers uit een serienummer kan het gebruik van cijfers een goed idee zijn. Aangezien hun uitvoer bijectief is (er is een één-op-één-toewijzing tussen invoer- en uitvoerwaarden) -- zult u geen botsingen hebben , in tegenstelling tot hashes. Dat betekent dat uw ID's niet zo lang hoeven te zijn als hashes.
De meeste cryptografische versleutelingen werken op 64-bits of grotere blokken, maar de PostgreSQL-wiki heeft een voorbeeld PL/pgSQL-procedure voor een "niet-cryptografische" code
functie die werkt op (32-bit) int
type. Disclaimer:ik heb deze functie zelf niet geprobeerd.
Om het voor uw primaire sleutels te gebruiken, voert u de CREATE FUNCTION-aanroep uit vanaf de wiki-pagina en vervolgens op uw lege tabellen doen:
ALTER TABLE foo ALTER COLUMN foo_id SET DEFAULT pseudo_encrypt(nextval('foo_foo_id_seq')::int);
En 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)