我正在尝试进行大规模 PostgreSQL 更新,但无法找出正确的方法
Posted
技术标签:
【中文标题】我正在尝试进行大规模 PostgreSQL 更新,但无法找出正确的方法【英文标题】:I am trying to do a massive PostgreSQL update and can not figure out the proper way 【发布时间】:2013-12-10 15:54:56 【问题描述】: UPDATE member_copy
SET locked_date = CURRENT_DATE,
notes = (
SELECT
notes
FROM
member_copy
WHERE
ID = 17579
) || ' CLOSED'
WHERE
ID = 17579
我正在尝试在 PostgreSQL 8.1.23 中像这样运行数据库更新。我需要同时使用大约 800 个 id 进行此更新。任何帮助将不胜感激。
【问题讨论】:
您应该现在计划升级到受支持的版本。 8.1 已经停止维护多年了。 我愿意,但这不是我的决定。 当然,您至少可以指出不这样做可能引起的安全问题。或许我享有特权,但我还没有遇到一位能将这类问题扫得一干二净的经理。 【参考方案1】:您可以在很大程度上简化为:
UPDATE member_copy
SET locked_date = CURRENT_DATE
,notes = COALESCE(notes || ' ', '') || 'CLOSED'
WHERE id IN (17579, 12345, ...); --- 800 IDs
COALESCE
用于捕获notes IS NULL
的情况。
甚至应该在古代 Postgres 8.1 中工作。但是您确实必须升级到当前版本。
在现代 Postgres 中,我会使用 ID 临时表(或子选择)并在 UPDATE
中加入它。
【讨论】:
谢谢!这对我来说非常有效。不幸的是,升级不是我的任务,但计划很快就会有一个新站点。以上是关于我正在尝试进行大规模 PostgreSQL 更新,但无法找出正确的方法的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PostgreSQL 中找出碎片索引并对其进行碎片整理?