我试图处理一个数组的计数器列在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]