尝试选择随机数据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()是易失性的这一事实。

一个简单的修复方法是关联子句:

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);

我稍微改写了一下逻辑,所以它更简单。没有必要使用数组来做你想做的事情

这是一个数据库<>不停摆弄