Postgres:更新表与物化视图相结合?错误:视图无法锁定物化视图中的行

时间:2014-03-24 15:30:53

标签: postgresql sql-update materialized-views

在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

1 个答案:

答案 0 :(得分:2)

可能与此错误有关:

http://www.postgresql.org/message-id/CAB7nPqTW3=97=e4aVO4qOp85ZA1OX74DvBhKTag1CEOgMZESaw@mail.gmail.com

And probably fixed in 9.3.4:

  

允许在UPDATE和DELETE命令(Michael Paquier)中引用实例化视图

     

此前,此类查询失败,并抱怨无法在物化视图中锁定行。

没有理由进行自我加入。只是做:

update account a
set status = 3
from mv_account mv
where mv.id = a.id and mv.very_long_calc