我正在尝试选择随机字符串。问题是它为每一行返回相同的值。为什么会出现这种情况以及如何解决?
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()
是易失性的这一事实。
一个简单的修复方法是关联子句:
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);
我稍微改写了一下逻辑,所以它更简单。没有必要使用数组来做你想做的事情
这是一个数据库<>不停摆弄