2013-12-10 44 views
0
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的更新。任何幫助,將不勝感激。我想做一個巨大的PostgreSQL更新,並找不到正確的方式

+4

您應該計劃升級到支持的版本* now *。 8.1現在已經過了多年的維護。 –

+0

我很想去,但那不是我的呼喚。 – inimrepus

+2

當然,您至少可以說出不這樣做可能導致的安全問題的可能性。也許我已經享有特權,但我還沒有遇到一位在地毯下掃蕩這種問題的經理。 –

回答

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中。

+0

謝謝!這對我來說非常合適。不幸的是升級不是我的要求,但有一個新的網站計劃不久。 – inimrepus

相關問題