刷新数据库事务中的物化视图

Chr*_*abe 5 postgresql transactions materialized-views rollback

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

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

当我添加数据并刷新视图时 - 当我执行 select 语句时不会出现任何记录

kli*_*lin 7

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

设置示例:

create table my_table(id int);
create materialized view mat_view as 
select * from my_table;
Run Code Online (Sandbox Code Playgroud)

交易:

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;
Run Code Online (Sandbox Code Playgroud)

交易外:

select * from mat_view;

-- but after rollback the view is empty again
 id 
----
(0 rows)    
Run Code Online (Sandbox Code Playgroud)