sql >> Database >  >> RDS >> PostgreSQL

Reeks vervangen door willekeurig getal

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)


  1. MySql-connector EF6

  2. Hoe id te krijgen na opgeslagen object in db in JPA?

  3. MySQL-query:match door komma's gescheiden waarde met kolom met door komma's gescheiden tekenreeks

  4. Hoe krijg ik alle rechten terug naar de rootgebruiker in MySQL?