PostgreSQLでは、setseed()
関数は、後続のrandom()
のシードを設定します 呼び出し(-1.0から1.0までの値)。
random()
関数は、単純な線形合同アルゴリズムを使用して疑似乱数を生成します。
setseed()
の場合 が呼び出され、後続のrandom()
の結果 現在のセッションでの呼び出しは、setseed()
を再発行することで繰り返すことができます 同じ議論で。
例
これがどのように機能するかを示す例です。
SELECT
setseed(0.8),
random(),
random();
結果:
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
ここで、同じステートメントを再度実行すると、まったく同じ結果が得られます。
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
明確にするために、両方のSELECT
を実行したときのターミナルの完全な出力は次のとおりです。 同時にステートメント。
SELECT
setseed(0.8),
random(),
random();
SELECT
setseed(0.8),
random(),
random();
結果:
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)
Seteed()を使用しない例
setseed()
を使用せずに、両方のステートメントを再度実行すると、次のようになります。 機能。
SELECT
random(),
random();
SELECT
random(),
random();
結果:
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)
したがって、この場合、2番目のステートメントはまったく新しいランダムな数字のセットを生成しました。