使用种子值 return 再次对同一组进行随机排序,即使某些行已被删除?

Do random sort with seed values return same set again even some rows are deleted?

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

我的问题是,如果我从数据库中删除一条记录,即使种子相同,结果也会因为元素长度的变化而不同。有没有办法让它在记录被删除后仍然存在?

示例查询:

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

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

如果您想要一个可靠但看似随机的顺序,您可以使用散列函数:

SELECT * FROM atable ORDER BY hashint4(id);

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

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

... ORDER BY hashint4(id + 42)