【问题标题】:Refresh a materialized view in database transaction刷新数据库事务中的物化视图
【发布时间】:2018-03-20 22:12:52
【问题描述】:

是否可以刷新数据库事务中的物化视图?

我正在为 laravel 中的复杂查询编写测试用例,它使用事务在测试运行后回滚。

当我添加数据并刷新视图时 - 当我执行选择语句时没有记录出现

【问题讨论】:

    标签: postgresql materialized-views


    【解决方案1】:

    如果您在事务中刷新物化视图并回滚事务,则视图将保持在事务之前的状态(即未刷新)。您必须提交事务才能完成其所有命令。

    示例设置:

    create table my_table(id int);
    create materialized view mat_view as 
    select * from my_table;
    

    交易:

    begin;
    insert into my_table
    select i from generate_series(1, 3) i;
    refresh materialized view mat_view;
    select * from mat_view;
    
    -- inside the transaction the view is refreshed
     id 
    ----
      1
      2
      3
    (3 rows)
    
    rollback;
    

    事务外:

    select * from mat_view;
    
    -- but after rollback the view is empty again
     id 
    ----
    (0 rows)    
    

    【讨论】:

    • 我只是在测试运行之后而不是在视图刷新之前回滚事务。我希望在测试/交易范围内维护数据
    • 我不确定我是否了解您想要做什么。我添加了一个示例。
    • 是我的查询搞砸了,而不是交易
    猜你喜欢
    • 2012-10-11
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 2021-10-14
    • 2014-07-11
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多