[英]trying to select random data PostgreSQL
我正在尝试选择随机字符串。 问题是它为每一行返回相同的值。 为什么会这样以及如何解决?
SELECT array_to_string(ARRAY(SELECT chr((48 + round(random() * 59)) :: integer)
FROM generate_series(1,40)), '') AS string FROM generate_series(1,10);
Output:
| string |
| duplicate |
| duplicate |
| duplicate |
...
10 行
Postgres 过度优化了子查询。 我认为这是一个错误,因为它忽略了random()
是 volatile 的事实。
一个简单的修复是一个相关条款:
select (select string_agg( chr(48 + (random() * 59)::int), '')
from generate_series(1 ,40)
where gs.i is not null
) AS string
from generate_series(1, 10) gs(i);
我稍微重写了逻辑,所以它更简单。 没有必要使用数组来做你想做的事情。
这是一个 db<>fiddle。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.