In PostgreSQL is de setseed()
functie stelt de seed in voor volgende random()
oproepen (waarde tussen -1,0 en 1,0, inclusief).
De random()
functie genereert een pseudo-willekeurig getal met behulp van een eenvoudig lineair congruentieel algoritme.
Als setseed()
wordt aangeroepen, de resultaten van de daaropvolgende random()
oproepen in de huidige sessie kunnen worden herhaald door setseed()
opnieuw uit te geven met hetzelfde argument.
Voorbeeld
Hier is een voorbeeld om te laten zien hoe het werkt.
SELECT
setseed(0.8),
random(),
random();
Resultaat:
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
Als ik nu dezelfde instructie opnieuw uitvoer, krijg ik precies hetzelfde resultaat:
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
Voor de duidelijkheid, hier is de volledige uitvoer in mijn terminal wanneer ik beide SELECT
. uitvoer verklaringen tegelijkertijd.
SELECT
setseed(0.8),
random(),
random();
SELECT
setseed(0.8),
random(),
random();
Resultaat:
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)
Voorbeeld ZONDER Setseed()
Dit is wat er gebeurt als ik beide instructies opnieuw uitvoer, maar zonder de setseed()
functie.
SELECT
random(),
random();
SELECT
random(),
random();
Resultaat:
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)
Dus in dit geval genereerde de tweede instructie een hele nieuwe reeks willekeurige getallen.