PostgreSQL 中的物化视图可以继承吗?

Can Materialized Views in PostgreSQL inherit?

我使用 PostgreSQL 处理时间序列数据。有一个事件 table 和分区的 table,如 Event_2016、Event_2017,它们继承自具有日期范围约束检查的事件。因此,当查询事件 table 时,PostgreSQL 仅使用需要的子 table。

为了汇总事件,我使用了 EventByDay 实体化视图。刷新它需要读取所有 Event_* tables。

我可以像上面 tables 一样使用实体化视图来限制每个实体化视图中的数据量吗? (EventByDay_2016 继承自 EventByDay)。

不,MVIEW 不能参与 table 继承。

但您可以创建一个(常规)子项 table,然后使用来自 MVIEW 的查询使用 insert into .. select ...。如果您想将 MVIEW 的查询存储在数据库中,则创建一个用于填充子项 table 的视图。

像这样:

初始设置:

create view v_event_by_day_2016 
as 
-- this is the complete query from your MVIEW
select ...;

create table event_by_day_2016
as
select *
from v_view_one;

alter table event_by_day_2016 inherit event_by_day; 
alter table event_by_day_2016 add constraint check (...);

刷新table:

truncate table event_by_day_2016;
insert into event_by_day_2016
select *
from v_event_by_day_2016;

或者,您可以使用 delete 以便以事务方式刷新子 table 中的数据。