修复插入不良的Postgres数组

时间:2015-12-10 21:15:26

标签: arrays postgresql

问题基于以下答案: 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'}

问题是,有很多可用的排列。我可以看到任何更新,但我不知道如何从列表中删除新的违规记录

1 个答案:

答案 0 :(得分:4)

您可以取消数组以提供表格,修剪前导/尾随单引号,并将其聚合回数组:

UPDATE tbl SET col1 = (
  SELECT array_agg(trim(x, ''''))
  FROM UNNEST(col1) u(x)
)