PostgreSQL setseed() 函数使用指南

PostgreSQL setseed() 函数为后续调用的 random() 函数设置种子,以让 random() 函数产生一个可重复的随机序列。

setseed() 语法

这里是 PostgreSQL setseed() 函数的语法:

setseed(seed) -> double precision

参数

seed
必需的。 后续调用的 random() 函数的种子。它必须介于 -1 和 1 之间(包括 -1.0 和 1.0)。

返回值

PostgreSQL setseed() 没有返回值。

setseed() 示例

让我们先通过 random() 函数产生几个随机数。

SELECT
    random(),
    random(),
    random();
-[ RECORD 1 ]---------------
random | 0.39696090303700515
random | 0.8836384228449994
random | 0.4060772195260256

再运行一次:

SELECT
    random(),
    random(),
    random();
-[ RECORD 1 ]----------------
random | 0.2312518157992649
random | 0.010247106452005994
random | 0.6146019109976812

我们发现,random() 函数每次产生的数字都是随机的,不可预测的。

让我们使用 setseed() 设置种子后再生成随机数,如下:

SELECT
    setseed(0.1),
    random(),
    random(),
    random();
-[ RECORD 1 ]---------------
setseed |
random  | 0.8499283349327946
random  | 0.6662111687168348
random  | 0.6272665186165547

然后,让我们在运行一遍上面的语句:

SELECT
    setseed(0.1),
    random(),
    random(),
    random();
-[ RECORD 1 ]---------------
setseed |
random  | 0.8499283349327946
random  | 0.6662111687168348
random  | 0.6272665186165547

现在,我们发现两次运行的结果是相同的。这就是 setseed() 函数为同一语句中的后续的 random() 函数设置了相同的种子,导致 random() 函数产生了一个可重复的随机序列。