首页 > 解决方案 > 在 Postgres UPDATE 查询中循环

问题描述

(Postgres 10.10)我在my_table中有以下字段:

loval INTEGER 
hival INTEGER 
valcount INTEGER 
values INTEGER[]

我需要将设置为一个数组,该数组包含valcount随机整数,每个整数介于lovalhival之间。因此对于:

loval: 3 
hival: 22 
valcount: 6

我希望将设置为:

{3, 6, 6, 13, 17, 22}

我知道如何使用低效的“循环游标”解决方案来做到这一点,但我想知道 Postgres 是否有办法进行内联循环计算。

注意:我查看了 generate_series,但我认为它不会产生我需要的东西。

标签: arrayspostgresqlrandomsql-updategenerate-series

解决方案


generate_series()确实是解决方案:

update my_table
  set "values" = array(select (random() * (hival - loval) + loval)::int 
                       from generate_series(1, valcount));

在线示例


请注意,这values是一个保留关键字,将其用作列名并不是一个好主意。


推荐阅读