sql >> Databáze >  >> RDS >> PostgreSQL

Nahrazení sekvence náhodným číslem

Pro generování jedinečných a náhodně vypadajících identifikátorů ze seriálu může být dobrým nápadem použití šifer. Protože jejich výstup je bijektivní (mezi vstupními a výstupními hodnotami existuje mapování jedna ku jedné) – nedojde k žádným kolizím , na rozdíl od hashů. Což znamená, že vaše identifikátory nemusí být dlouhé jako hash.

Většina kryptografických šifer funguje na 64bitových nebo větších blocích, ale wiki PostgreSQL má ukázkový postup PL/pgSQL pro „nekryptografickou“ šifru funkce, která funguje na (32bitovém) int typ. Zřeknutí se odpovědnosti:Sám jsem tuto funkci nezkoušel použít.

Chcete-li jej použít pro primární klíče, spusťte volání CREATE FUNCTION ze stránky wiki a poté na prázdném tabulky dělají:

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

A 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. MariaDB a externí data

  2. SQL Pivot s více sloupci

  3. Změnit datový typ sloupce s primárním klíčem

  4. Chyba Upsert (On Conflict Do Update) ukazující na duplicitní omezené hodnoty