繁体   English   中英

尝试选择随机数据 PostgreSQL

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM