sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan fungerer Setseed() i PostgreSQL

I PostgreSQL er setseed() funktionen indstiller startpunktet for efterfølgende random() opkald (værdi mellem -1,0 og 1,0 inklusive).

random() funktion genererer et pseudo-tilfældigt tal ved hjælp af en simpel lineær kongruentiel algoritme.

Hvis setseed() kaldes, resultaterne af efterfølgende random() opkald i den aktuelle session kan gentages ved at genudsende setseed() med samme argument.

Eksempel

Her er et eksempel for at vise, hvordan det virker.

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

Resultat:

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

Nu, hvis jeg kører den samme sætning igen, får jeg nøjagtig det samme resultat:

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

Bare for at være klar, her er det fulde output i min terminal, når jeg kører både SELECT udsagn på samme tid.

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)

Eksempel UDEN Setseed()

Her er hvad der sker, hvis jeg kører begge sætninger igen, men uden 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 dette tilfælde genererede den anden sætning et helt nyt sæt tilfældige tal.


  1. Få områder med forbedringer i PostgreSQL 9.4

  2. Hvordan rettes fejl i pg_dump-versionen?

  3. Sådan aktiveres den langsomme forespørgselslog i MySQL

  4. Hvordan bruger man en PostgreSQL container med eksisterende data?