PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zastępowanie sekwencji liczbą losową

Do generowania unikalnych i losowo wyglądających identyfikatorów z numeru seryjnego dobrym pomysłem może być użycie szyfrów. Ponieważ ich dane wyjściowe są bijektywne (istnieje mapowanie jeden do jednego między wartościami wejściowymi i wyjściowymi) -- nie będziesz mieć żadnych kolizji , w przeciwieństwie do skrótów. Co oznacza, że ​​Twoje identyfikatory nie muszą być tak długie jak hasze.

Większość szyfrów kryptograficznych działa na blokach 64-bitowych lub większych, ale wiki PostgreSQL zawiera przykładową procedurę PL/pgSQL dla szyfru „niekryptograficznego” funkcja działająca na (32-bitowym) int rodzaj. Zastrzeżenie:sam nie próbowałem korzystać z tej funkcji.

Aby użyć go dla kluczy podstawowych, uruchom wywołanie CREATE FUNCTION na stronie wiki, a następnie na swoim pustym stoły robią:

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

I 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ustawić „5 dni” (interwał datetime) w jdbc dla PostgreSQL?

  2. JPA 2 @SequenceGenerator @GeneratedValue wytwarza unikatowe naruszenie ograniczeń

  3. Nazwy stref czasowych o identycznych właściwościach dają różne wyniki po zastosowaniu do znacznika czasu

  4. postgres array_agg BŁĄD:nie można akumulować tablic o różnych wymiarach

  5. Używanie psql do łączenia się z PostgreSQL w trybie SSL