W PostgreSQL funkcja setseed()
funkcja ustawia ziarno dla kolejnych random()
połączeń (wartość od -1,0 do 1,0 włącznie).
random()
funkcja generuje liczbę pseudolosową za pomocą prostego liniowego algorytmu kongruencji.
Jeśli setseed()
jest wywoływana, wyniki kolejnych random()
wywołania w bieżącej sesji są powtarzalne przez ponowne wydanie setseed()
z tym samym argumentem.
Przykład
Oto przykład pokazujący, jak to działa.
SELECT
setseed(0.8),
random(),
random();
Wynik:
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
Teraz, jeśli ponownie uruchomię tę samą instrukcję, otrzymam dokładnie ten sam wynik:
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
Żeby było jasne, oto pełne dane wyjściowe w moim terminalu, gdy uruchamiam oba SELECT
oświadczenia w tym samym czasie.
SELECT
setseed(0.8),
random(),
random();
SELECT
setseed(0.8),
random(),
random();
Wynik:
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)
Przykład BEZ Setseed()
Oto, co się stanie, jeśli ponownie uruchomię obie instrukcje, ale bez setseed()
funkcja.
SELECT
random(),
random();
SELECT
random(),
random();
Wynik:
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 więc w tym przypadku druga instrukcja wygenerowała zupełnie nowy zestaw liczb losowych.