【问题标题】:Postgres: Update table joined with materialized view? Error: view cannot lock rows in materialized viewPostgres:更新与物化视图连接的表?错误:视图无法在物化视图中锁定行
【发布时间】: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

【问题讨论】:

    标签: postgresql sql-update materialized-views


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2020-01-31
      • 2014-06-07
      • 2014-05-16
      • 2018-04-11
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多