PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Fonctionnement de Setseed() dans PostgreSQL

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.