In PostgreSQL der setseed()
Funktion setzt den Seed für nachfolgende random()
Anrufe (Wert zwischen -1,0 und 1,0 einschließlich).
Der random()
Funktion generiert eine Pseudozufallszahl mit einem einfachen linearen kongruenten Algorithmus.
Wenn setseed()
aufgerufen wird, die Ergebnisse nachfolgender random()
Aufrufe in der aktuellen Sitzung können wiederholt werden, indem setseed()
erneut ausgegeben wird mit dem gleichen Argument.
Beispiel
Hier ist ein Beispiel, um zu demonstrieren, wie es funktioniert.
SELECT
setseed(0.8),
random(),
random();
Ergebnis:
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
Wenn ich jetzt dieselbe Anweisung noch einmal ausführe, erhalte ich genau dasselbe Ergebnis:
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
Nur um das klarzustellen, hier ist die vollständige Ausgabe in meinem Terminal, wenn ich beide SELECT
ausführe Anweisungen gleichzeitig.
SELECT
setseed(0.8),
random(),
random();
SELECT
setseed(0.8),
random(),
random();
Ergebnis:
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)
Beispiel OHNE Seteed()
Hier ist nun, was passiert, wenn ich beide Anweisungen erneut ausführe, aber ohne setseed()
Funktion.
SELECT
random(),
random();
SELECT
random(),
random();
Ergebnis:
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)
In diesem Fall hat die zweite Anweisung also einen ganz neuen Satz von Zufallszahlen generiert.