In PostgreSQL, il setseed()
la funzione imposta il seme per il successivo random()
chiamate (valore compreso tra -1.0 e 1.0, inclusi).
Il random()
La funzione genera un numero pseudo-casuale utilizzando un semplice algoritmo congruenziale lineare.
Se setseed()
viene chiamato, i risultati del successivo random()
le chiamate nella sessione corrente sono ripetibili riemettendo setseed()
con lo stesso argomento.
Esempio
Ecco un esempio per dimostrare come funziona.
SELECT
setseed(0.8),
random(),
random();
Risultato:
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
Ora, se eseguo di nuovo la stessa istruzione, ottengo esattamente lo stesso risultato:
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
Giusto per essere chiari, ecco l'output completo nel mio terminale quando eseguo entrambi SELECT
dichiarazioni allo stesso tempo.
SELECT
setseed(0.8),
random(),
random();
SELECT
setseed(0.8),
random(),
random();
Risultato:
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)
Esempio SENZA Setseed()
Ora ecco cosa succede se eseguo di nuovo entrambe le istruzioni, ma senza setseed()
funzione.
SELECT
random(),
random();
SELECT
random(),
random();
Risultato:
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)
Quindi, in questo caso, la seconda istruzione ha generato un insieme completamente nuovo di numeri casuali.