在 Postgres UPDATE 查询中循环
Looping inside a Postgres UPDATE query
(Postgres 10.10)
我在 my_table 中有以下字段:
loval INTEGER
hival INTEGER
valcount INTEGER
values INTEGER[]
我需要将 values 设置为包含 valcount 个随机整数的数组,每个整数介于 loval 之间和 hival 包括在内。所以对于:
loval: 3
hival: 22
valcount: 6
我希望将 values 设置为:
{3, 6, 6, 13, 17, 22}
我知道如何使用低效的 "loop through the cursor" 解决方案来做到这一点,但我想知道 Postgres 是否有办法进行内联循环计算。
注意:我查看了 generate_series,但我认为它无法生成我需要的内容。
generate_series()
确实是解决方案:
update my_table
set "values" = array(select (random() * (hival - loval) + loval)::int
from generate_series(1, valcount));
请注意 values
是保留关键字,将其用作列名不是一个好主意。
(Postgres 10.10) 我在 my_table 中有以下字段:
loval INTEGER
hival INTEGER
valcount INTEGER
values INTEGER[]
我需要将 values 设置为包含 valcount 个随机整数的数组,每个整数介于 loval 之间和 hival 包括在内。所以对于:
loval: 3
hival: 22
valcount: 6
我希望将 values 设置为:
{3, 6, 6, 13, 17, 22}
我知道如何使用低效的 "loop through the cursor" 解决方案来做到这一点,但我想知道 Postgres 是否有办法进行内联循环计算。
注意:我查看了 generate_series,但我认为它无法生成我需要的内容。
generate_series()
确实是解决方案:
update my_table
set "values" = array(select (random() * (hival - loval) + loval)::int
from generate_series(1, valcount));
请注意 values
是保留关键字,将其用作列名不是一个好主意。