2012-05-24 41 views
1

我試圖根據第二個值中的值更新一個表中的布爾列。基於包含「select unnest」子句的子查詢更新列

UPDATE channels 
SET contains_photos = TRUE 
WHERE id IN (SELECT unnest(ancestors) 
    FROM channel_tree WHERE id = 11329); 

channel_tree.ancestors列包含一個通道ID數組。上面與下面的錯誤而失敗:

ERROR: cannot TRUNCATE "channel_tree" because it is being used by active queries in this session

最重要的目標是設置contains_photos柱爲true對於一個給定信道的所有ancestors。任何人都知道如何最好地減輕這種錯誤,甚至是一種替代解決方案?

+0

是整個代碼?有沒有'truncate'命令? –

+0

不幸的是,就是這些。我的代碼中沒有'truncate'。 – jchilders

+0

'select * from pg_locks;'結果中有什麼異常? –

回答

1

不知道爲什麼你的錯誤說TRUNCATE。這聽起來像你有一個觸發器或規則正在做我們看不到的截斷。

這裏是做相同的查詢的一些替代方法:

UPDATE channels 
SET contains_photos = TRUE 
WHERE id = ANY (SELECT ancestors 
    FROM channel_tree WHERE id = 11329); 

或者有加盟:

UPDATE channels 
SET contains_photos = TRUE 
FROM channel_tree 
WHERE channels.id = ANY (channel_tree.ancestors) 
     AND channel_tree.id = 11329;