sql >> Databasteknik >  >> RDS >> PostgreSQL

Ersätter sekvens med slumptal

För att generera unika och slumpmässiga identifierare från en serie kan det vara en bra idé att använda chiffer. Eftersom deras utdata är bijektiv (det finns en en-till-en-mappning mellan ingångs- och utdatavärden) -- kommer du inte att ha några kollisioner , till skillnad från hash. Vilket innebär att dina identifierare inte behöver vara lika långa som hash.

De flesta kryptografiska chiffer fungerar på 64-bitars eller större block, men PostgreSQL-wikin har en exempel PL/pgSQL-procedur för ett "icke-kryptografiskt" chiffer funktion som fungerar på (32-bitars) int typ. Ansvarsfriskrivning:Jag har inte provat att använda den här funktionen själv.

För att använda den för dina primärnycklar, kör CREATE FUNCTION-anropet från wikisidan och sedan på din tomma tabeller gör:

ALTER TABLE foo ALTER COLUMN foo_id SET DEFAULT pseudo_encrypt(nextval('foo_foo_id_seq')::int);

Och 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. Hur får man Android-appen att fungera med MySQL onlinedatabas?

  2. Fulltextsökning sedan PostgreSQL 8.3

  3. Kan du använda namngivna parametrar i Laravel Eloquent

  4. PHP Varning:mysqli::query():Det gick inte att hämta mysqli