psql:更新由字符串数组组成的列,合并另一个字符串数组并删除重复项

时间:2018-12-11 15:33:21

标签: arrays postgresql sql-update

我尝试了以下操作:

SELECT tags FROM articles WHERE id = 1;
=> {news,new} 
UPDATE articles SET tags = uniq(array_cat(tags, '{new,trendy,latest}')) WHERE id = 1;
=> [1]
SELECT tags FROM articles WHERE id = 1;
=> {news,new,trendy,latest}

但是在UPDATE命令中,我得到了:

ERROR: function uniq(text[]) does not exist

现在有一种方法可以仅在一个UPDATE命令中添加不存在的标签吗?

感谢您的帮助!

编辑:

我想一个解决方案可能是为每个单独的标签迭代更新,添加一个where约束,例如: WHERE NOT ('tag-name' = ANY(tags)) 但我想知道我们能否一次完成。

EDIT2:

找到了这个https://grokbase.com/t/postgresql/pgsql-general/083k9e85rb/array-cat-without-duplicity,但遍历每个标签似乎更加复杂。

1 个答案:

答案 0 :(得分:0)

发现了两种方法:

UPDATE articles SET tags = ARRAY(SELECT unnest(tags) UNION SELECT unnest(ARRAY['new', 'trendy', 'latest'])) WHERE id = 1;
 

或:

UPDATE articles SET tags = ARRAY(SELECT DISTINCT unnest(array_cat(tags, '{new,trendy,latest}'))) WHERE id = 673738;
 

还不会标记为已接受答案。随时发布您的解决方案。谢谢! :-)