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 中的数据。
我使用 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 中的数据。