Postgres: on conflict,求和两个向量(数组)



我试图处理一个数组的计数器列在Postgres例如,假设我有这样一个表

计数器th>

表达式有两个问题:

array_agg(unnest(test.counters) + unnest([2,0,2,1]))
  • 数组没有+操作符,
  • 不能使用集合值表达式作为聚合函数的参数。

您需要在from子句中的单个unnest()调用中打开两个数组:

insert into test (name, counters) 
values ('Joe', array[2,0,2,1]) 
on conflict (name) do 
update set 
counters = (
select array_agg(e1 + e2)
from unnest(test.counters, excluded.counters) as u(e1, e2)
)

还要注意values中正确的数据语法和excluded特殊记录的使用(参见文档中的相关信息)

在db<>fiddle中测试。

根据您对我的评论的回复,它将始终是数组中的四个元素,并且更新是由某种类型的程序完成的,我建议这样做:

insert into test (name, counters)
values (:NAME, :COUNTERS)
on conflict (name) do
update set
counters[1] = counters[1] + :COUNTERS[1],
counters[2] = counters[2] + :COUNTERS[2],
counters[3] = counters[3] + :COUNTERS[3],
counters[4] = counters[4] + :COUNTERS[4]

相关内容

  • 没有找到相关文章

最新更新