我正在编写分页API,通过设置随机种子值来给出随机结果。除非用户想洗牌结果,结果将是相同的,但如果用户想洗牌,我将重新创建种子值,这样它将返回一组不同的记录。
我的问题是如果我从数据库中删除一条记录,即使种子是相同的,结果也会因为元素长度的变化而不同。有什么方法可以使它在删除记录后仍然保持不变吗?
示例查询:

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

最佳答案

我不会按random()来点菜,因为这是无法正确控制的。
如果你想要一个可靠的,但看起来是随机的顺序,你可以使用一个散列函数:

SELECT * FROM atable ORDER BY hashint4(id);

这在DELETEs上是稳定的,因为散列值不会改变。
如果您需要不同的“随机”顺序,请以可重复的方式生成一个随机整数并使用
... ORDER BY hashint4(id + 42)

关于postgresql - 即使删除了某些行,带有种子值的随机排序会再次返回相同的集合吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56649606/

10-16 21:45