【问题标题】:I am trying to do a massive PostgreSQL update and can not figure out the proper way我正在尝试进行大规模 PostgreSQL 更新,但无法找出正确的方法
【发布时间】: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 已经停止维护多年了。
  • 我愿意,但这不是我的决定。
  • 当然,您至少可以指出不这样做可能引起的安全问题。或许我享有特权,但我还没有遇到一位能将这类问题扫得一干二净的经理。

标签: database postgresql postgresql-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 中加入它。

【讨论】:

  • 谢谢!这对我来说非常有效。不幸的是,升级不是我的任务,但计划很快就会有一个新站点。
猜你喜欢
  • 1970-01-01
  • 2020-10-20
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
相关资源
最近更新 更多