sql >> Database teknologi >  >> RDS >> PostgreSQL

Udskiftning af sekvens med tilfældigt tal

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)


  1. mysqli_fetch_array giver mig duplikerede rækker

  2. Opretter forbindelse til Microsoft Access i IRI Workbench

  3. Sådan bruger du mange LIKE-operatorer og bruger indeks

  4. at vælge rækker med id fra en anden tabel