V PostgreSQL, setseed()
funkce nastaví semeno pro následující random()
volání (hodnota mezi -1,0 a 1,0 včetně).
random()
funkce generuje pseudonáhodné číslo pomocí jednoduchého lineárního kongruenciálního algoritmu.
Pokud setseed()
je voláno, výsledky následného random()
volání v aktuální relaci lze opakovat opětovným zadáním setseed()
se stejným argumentem.
Příklad
Zde je příklad demonstrující, jak to funguje.
SELECT
setseed(0.8),
random(),
random();
Výsledek:
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
Nyní, když znovu spustím stejný příkaz, dostanu přesně stejný výsledek:
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
Aby bylo jasno, zde je úplný výstup v mém terminálu, když spustím oba SELECT
prohlášení ve stejnou dobu.
SELECT
setseed(0.8),
random(),
random();
SELECT
setseed(0.8),
random(),
random();
Výsledek:
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)
Příklad BEZ Setseed()
Nyní se podívejme, co se stane, když znovu spustím oba příkazy, ale bez setseed()
funkce.
SELECT
random(),
random();
SELECT
random(),
random();
Výsledek:
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)
Takže v tomto případě druhý příkaz vygeneroval zcela novou sadu náhodných čísel.