我需要使用基于来自现有表的种子的random()
生成一个随机值。种子是文本,但setseed()
需要在-1.0
和1.0
之间加双精度。原因是我需要给定数据库中的现有值的随机数相同。
我想定义一个函数,该函数获取种子并根据该种子返回一个随机数:
CREATE OR REPLACE FUNCTION random_with_seed(seed text) RETURNS double precision AS
$$
DECLARE casted double precision;
BEGIN
-- cast seed to a double between -1.0 and 1.0
casted = ???
setseed(casted);
RETURN random();
END
$$ LANGUAGE plpgsql IMMUTABLE;
将文本转换为setseed()
的有效参数的最佳方法是什么?
SELECT cos(hashtext('some text'));
cos
---------------------
-0.9092973651315766
(1 row)