在包含数组的列中插入元素

问题描述 投票:0回答:1

我有一个 PostgreSQL 表,其中包含一个带有字符串数组的列,我使用 SQLAlchemy 来管理它。 我想构建一个“upsert”函数,因此如果特定单元格包含示例

{'a', 'b'}
,并且我尝试使用
'b'
更新它,则输出应该仍然是
{'a', 'b'}

可以吗?

postgresql sqlalchemy
1个回答
0
投票

无论哪种方式,您都必须删除合并值的重复项,请考虑编写自己的纯 sql 函数,如下所示:

create function public.array_unique(a anyarray) returns anyarray
  language sql
as
$$
  select array (
    select distinct v from unnest(a) as b(v)
  )
$$;

然后就可以查看结果了

select public.array_unique(array ['a', 'b'] || array ['a'])

然后调整它

insert into distributors (did, dname)
values (5, '{a,b}'), (6, '{a}')
on conflict (did) do update set dname = public.array_unique(dname || excluded.dname);
© www.soinside.com 2019 - 2024. All rights reserved.