我正在尝试进行大规模的PostgreSQL更新,无法找出正确的方法

时间:2013-12-10 15:54:56

标签: database postgresql postgresql-8.1

    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进行此更新。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您可以在很大程度上简化为:

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中加入它。