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.