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.