PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Substituindo sequência por número aleatório


Para gerar identificadores únicos e de aparência aleatória a partir de um serial, o uso de cifras pode ser uma boa ideia. Como a saída deles é bijetiva (há um mapeamento um-para-um entre os valores de entrada e saída) -- você não terá colisões , ao contrário dos hashes. O que significa que seus identificadores não precisam ser tão longos quanto hashes.

A maioria das cifras criptográficas funciona em blocos de 64 bits ou maiores, mas o wiki do PostgreSQL tem um exemplo de procedimento PL/pgSQL para uma cifra "não criptográfica" função que funciona em (32 bits) int modelo. Isenção de responsabilidade:eu mesmo não tentei usar esta função.

Para usá-lo para suas chaves primárias, execute a chamada CREATE FUNCTION na página do wiki e, em seguida, em seu empty tabelas fazem:
ALTER TABLE foo ALTER COLUMN foo_id SET DEFAULT pseudo_encrypt(nextval('foo_foo_id_seq')::int);

E voilá!
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)