问题基于以下答案: Postgres SELECT where value in array
我有一个包含值的列:
{'V1', 'V2', "'V3 With Space'"}
它应该看起来像:
{V1, V2, "V3 With Space"}
阵列中只有15种可能的选择。我可以通过以我选择的语言迭代整个数据库,解压缩数组,然后正确更新它来解决这个问题。但是,由于有150万条记录,交易时间大约需要2天。 (下载,然后重新上传所有记录)
问题是:
有没有办法使用更新命令直接解决此问题,而无需重新分析所有记录
以下是我一直在尝试做的事情:
UPDATE tbl SET col1 = {V1} WHERE col1 = {'V1'}
问题是,有很多可用的排列。我可以看到任何更新,但我不知道如何从列表中删除新的违规记录
答案 0 :(得分:4)
您可以取消数组以提供表格,修剪前导/尾随单引号,并将其聚合回数组:
UPDATE tbl SET col1 = (
SELECT array_agg(trim(x, ''''))
FROM UNNEST(col1) u(x)
)