sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur Setseed() fungerar i PostgreSQL

I PostgreSQL, setseed() funktionen ställer in kärnan för efterföljande random() anrop (värde mellan -1,0 och 1,0 inklusive).

random() funktionen genererar ett pseudoslumptal med en enkel linjär kongruentialalgoritm.

Om setseed() anropas, resultatet av efterföljande random() anrop i den aktuella sessionen är repeterbara genom att återutge setseed() med samma argument.

Exempel

Här är ett exempel för att visa hur det fungerar.

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

Resultat:

 setseed | random             | random
---------+--------------------+--------------------
         | 0.7998745861323613 | 0.9776304992484732

Nu, om jag kör samma uttalande igen, får jag exakt samma resultat:

 setseed | random             | random
---------+--------------------+--------------------
         | 0.7998745861323613 | 0.9776304992484732

Bara för att vara tydlig, här är hela resultatet i min terminal när jag kör båda SELECT uttalanden samtidigt.

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

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

Resultat:

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)

Exempel UTAN Setseed()

Här är vad som händer om jag kör båda satserna igen, men utan setseed() funktion.

SELECT 
  random(), 
  random();

SELECT 
  random(), 
  random();

Resultat:

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)

Så i det här fallet genererade den andra satsen en helt ny uppsättning slumptal.


  1. Returnera endast numeriska värden i MariaDB

  2. Fel vid installation av Psychopg2 på MacOS 10.9.5

  3. Introducerar ny funktion - Spotlight Cloud Database Growth Report

  4. Ta reda på varför ett e-postmeddelande inte kunde skickas i SQL Server (T-SQL)