在Postgres UPDATE查询中循环 [英] Looping inside a Postgres UPDATE query

查看:177
本文介绍了在Postgres UPDATE查询中循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

(Postgres 10.10) I have the following fields in my_table:

loval INTEGER 
hival INTEGER 
valcount INTEGER 
values INTEGER[]

我需要将 values 设置为包含 valcount 个随机整数的数组,每个整数在 loval hival 之间(包括两端)。因此,对于:

I need to set values to an array containing valcount random integers each between loval and hival inclusive. So for:

loval: 3 
hival: 22 
valcount: 6

我想将设置为以下内容:

I'm looking to set values to something like:

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

我知道如何使用效率低下的通过游标循环解决方案来执行此操作,但我想知道Postgres是否可以进行内联循环计算。

I know how to do this with an inefficient "loop through the cursor" solution, but I'm wondering if Postgres has a way to do a looping computation inline.

注意:我查看了generate_series,但我认为它不能满足我的需要。

Note: I looked at generate_series, but I don't think it produces what I need.

推荐答案

generate_series()确实是解决方案:

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

在线示例

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

Note that values is a reserved keyword, it's not a good idea to use that as a column name.

这篇关于在Postgres UPDATE查询中循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆