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

Como Setseed() funciona no PostgreSQL


No PostgreSQL, o setseed() A função define a semente para o random() subsequente chamadas (valor entre -1,0 e 1,0, inclusive).

O random() A função gera um número pseudo-aleatório usando um algoritmo congruencial linear simples.

Se setseed() é chamado, os resultados de random() subsequentes as chamadas na sessão atual podem ser repetidas reemitindo setseed() com o mesmo argumento.

Exemplo


Aqui está um exemplo para demonstrar como funciona.
SELECT 
  setseed(0.8),
  random(), 
  random();

Resultado:
 setseed | random             | random
---------+--------------------+--------------------
         | 0.7998745861323613 | 0.9776304992484732

Agora, se eu executar a mesma instrução novamente, recebo exatamente o mesmo resultado:
 setseed | random             | random
---------+--------------------+--------------------
         | 0.7998745861323613 | 0.9776304992484732

Só para ficar claro, aqui está a saída completa no meu terminal quando executo os dois SELECT declarações ao mesmo tempo.
SELECT 
  setseed(0.8),
  random(), 
  random();

SELECT 
  setseed(0.8),
  random(), 
  random();

Resultado:
postgres=# SELECT 
postgres-#   setseed(0.8),
postgres-#   random(), 
postgres-#   random();
 setseed |       random       |       random       
---------+--------------------+--------------------
         | 0.7998745861323613 | 0.9776304992484732
(1 row)


postgres=# 
postgres=# SELECT 
postgres-#   setseed(0.8),
postgres-#   random(), 
postgres-#   random();
 setseed |       random       |       random       
---------+--------------------+--------------------
         | 0.7998745861323613 | 0.9776304992484732
(1 row)

Exemplo SEM Setseed()


Agora, aqui está o que acontece se eu executar as duas instruções novamente, mas sem o setseed() função.
SELECT 
  random(), 
  random();

SELECT 
  random(), 
  random();

Resultado:
postgres=# SELECT 
postgres-#   random(), 
postgres-#   random();
       random       |       random       
--------------------+--------------------
 0.8789931563830109 | 0.8981750563441189
(1 row)


postgres=# 
postgres=# SELECT 
postgres-#   random(), 
postgres-#   random();
       random       |      random       
--------------------+-------------------
 0.3630186384623926 | 0.909389353037664
(1 row)

Então, neste caso, a segunda declaração gerou um novo conjunto de números aleatórios.