根据包含“select unnest”子句的子查询更新列

时间:2012-05-24 18:06:59

标签: postgresql postgresql-9.1

我试图根据一秒中的值更新一个表中的布尔列。

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

channel_tree.ancestors列包含一系列渠道ID。以上错误导致以下错误:

  

错误:无法截断“channel_tree”,因为此会话中的活动查询正在使用它

最重要的目标是为给定频道的所有contains_photosancestors列设置为true。任何人都知道如何最好地缓解这个错误,甚至是替代解决方案?

1 个答案:

答案 0 :(得分: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;