For at generere unikke og tilfældigt udseende identifikatorer fra en serie, kan det være en god idé at bruge ciphers. Da deres output er bijektivt (der er en en-til-en mapping mellem input- og outputværdier) -- vil du ikke have nogen kollisioner , i modsætning til hashes. Hvilket betyder, at dine identifikatorer ikke behøver at være så lange som hashes.
De fleste kryptografiske chiffer fungerer på 64-bit eller større blokke, men PostgreSQL-wikien har en eksempel PL/pgSQL-procedure for en "ikke-kryptografisk" chiffer
funktion, der virker på (32-bit) int
type. Ansvarsfraskrivelse:Jeg har ikke selv prøvet at bruge denne funktion.
For at bruge det til dine primære nøgler skal du køre CREATE FUNCTION-kaldet fra wiki-siden og derefter på din tomme tabeller gør:
ALTER TABLE foo ALTER COLUMN foo_id SET DEFAULT pseudo_encrypt(nextval('foo_foo_id_seq')::int);
Og 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)