在Postgres 9.3.3中,我有一个物化视图,可以执行一些繁重/密集的计算。我想使用连接到原始表的物化视图来确定改变它的状态的值。如何在Postgres中使用更新连接执行此操作?
UPDATE account
SET status = 3
FROM account a
JOIN mv_account mv ON mv.id = a.id
WHERE mv.very_long_calc = true
ERROR: cannot lock rows in materialized view "mv_account"
SQL state: 42809
答案 0 :(得分:2)
可能与此错误有关:
允许在UPDATE和DELETE命令(Michael Paquier)中引用实例化视图
此前,此类查询失败,并抱怨无法在物化视图中锁定行。
没有理由进行自我加入。只是做:
update account a
set status = 3
from mv_account mv
where mv.id = a.id and mv.very_long_calc