Dans PostgreSQL, le setseed()
la fonction définit la graine pour random()
suivant appels (valeur entre -1.0 et 1.0 inclus).
Le random()
génère un nombre pseudo-aléatoire à l'aide d'un simple algorithme linéaire congruentiel.
Si setseed()
est appelée, les résultats des random()
suivants les appels de la session en cours sont répétables en réémettant setseed()
avec le même argument.
Exemple
Voici un exemple pour montrer comment cela fonctionne.
SELECT
setseed(0.8),
random(),
random();
Résultat :
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
Maintenant, si j'exécute à nouveau la même instruction, j'obtiens exactement le même résultat :
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
Juste pour être clair, voici la sortie complète dans mon terminal lorsque j'exécute à la fois SELECT
déclarations en même temps.
SELECT
setseed(0.8),
random(),
random();
SELECT
setseed(0.8),
random(),
random();
Résultat :
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)
Exemple SANS Setseed()
Maintenant, voici ce qui se passe si j'exécute à nouveau les deux instructions, mais sans le setseed()
fonction.
SELECT
random(),
random();
SELECT
random(),
random();
Résultat :
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)
Donc, dans ce cas, la deuxième instruction a généré un tout nouvel ensemble de nombres aléatoires.