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.