Postgres:更新与物化视图连接的表?错误:视图无法在物化视图中锁定行

Posted

技术标签:

【中文标题】Postgres:更新与物化视图连接的表?错误:视图无法在物化视图中锁定行【英文标题】:Postgres: Update table joined with materialized view? Error: view cannot lock rows in materialized view 【发布时间】:2014-03-24 15:30:52 【问题描述】:

在 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】:

可能与此错误有关:

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

【讨论】:

以上是关于Postgres:更新与物化视图连接的表?错误:视图无法在物化视图中锁定行的主要内容,如果未能解决你的问题,请参考以下文章

Laravel/Eloquent 分页和 groupBy 用于 postgres 物化视图模型

在Postgres中的物化视图上创建主键

在 Postgres 的物化视图上创建主键

pgsql怎么改表名不影响物化视图

雪花在自我加入时创建物化视图

刷新或创建物化视图? Postgres