即使删除了某些行,带有种子值的随机排序会再次返回相同的集合吗?

时间:2019-06-18 12:51:33

标签: postgresql random-seed

我正在编写一个分页API,以通过设置随机种子值来提供随机结果。除非用户想要随机播放结果,否则结果将是相同的,但是如果用户想要随机播放,我将重新创建种子值,以便它将返回不同的记录集。

我的问题是,如果我从数据库中删除一条记录,即使种子相同,由于元素长度的变化,结果也会有所不同。有什么方法可以使它在记录删除后也能持久保存?

查询示例:

set seed to 0.1; select * from table order by random();

1 个答案:

答案 0 :(得分:2)

我不会按random()订购,因为无法正确控制。

如果您想要可靠但看似随机的顺序,则可以使用哈希函数:

SELECT * FROM atable ORDER BY hashint4(id);

这将在DELETE时间内保持稳定,因为哈希值不会改变。

如果您需要不同的“随机”顺序,请以可重复的方式生成一个随机整数并使用

... ORDER BY hashint4(id + 42)