没有数据的物化视图仍在加载数据
Materialized View With No Data still loading data
我对创建物化视图的理解 WITH NO DATA
是在我或我设置的策略刷新视图之前不会加载任何记录。但是,当使用 timescaledb 并提供此选项时,我可以立即查询 table 并且似乎正在加载记录。
By default, views are automatically refreshed. You can adjust this by setting the WITH NO DATA option.
CREATE MATERIALIZED VIEW timescaledb_view
WITH (timescaledb.continuous) AS
/* Query */
WITH NO DATA;
然而,当访问 timescaledb_view
时,它似乎完全刷新了,无论我有什么查询 运行。我是不是误解了这是怎么回事?
我假设 TimescaleDB 2.x 因为问题引用了最新的文档。
连续聚合的默认行为是使用 real time aggregation feature,它用原始超表上的视图查询 运行 的结果补充物化数据。因此,在空连续聚合的情况下(如问题中),视图的 select 将查询原始超表。
可以通过在 creation 期间将选项 timescaledb.materialized_only
设置为 true
来禁用实时聚合,例如:
CREATE MATERIALIZED VIEW timescaledb_view
WITH (timescaledb.continuous, timescaledb.materialized_only=true) AS
/* Query */
WITH NO DATA;
或 altering the materialized view:
ALTER MATERIALIZED VIEW timescaledb_view SET (timescaledb.materialized_only = true);
然后,如果没有手动或通过创建的策略完成具体化,则对连续聚合的 select 应该 return 为空结果。
我对创建物化视图的理解 WITH NO DATA
是在我或我设置的策略刷新视图之前不会加载任何记录。但是,当使用 timescaledb 并提供此选项时,我可以立即查询 table 并且似乎正在加载记录。
By default, views are automatically refreshed. You can adjust this by setting the WITH NO DATA option.
CREATE MATERIALIZED VIEW timescaledb_view
WITH (timescaledb.continuous) AS
/* Query */
WITH NO DATA;
然而,当访问 timescaledb_view
时,它似乎完全刷新了,无论我有什么查询 运行。我是不是误解了这是怎么回事?
我假设 TimescaleDB 2.x 因为问题引用了最新的文档。
连续聚合的默认行为是使用 real time aggregation feature,它用原始超表上的视图查询 运行 的结果补充物化数据。因此,在空连续聚合的情况下(如问题中),视图的 select 将查询原始超表。
可以通过在 creation 期间将选项 timescaledb.materialized_only
设置为 true
来禁用实时聚合,例如:
CREATE MATERIALIZED VIEW timescaledb_view
WITH (timescaledb.continuous, timescaledb.materialized_only=true) AS
/* Query */
WITH NO DATA;
或 altering the materialized view:
ALTER MATERIALIZED VIEW timescaledb_view SET (timescaledb.materialized_only = true);
然后,如果没有手动或通过创建的策略完成具体化,则对连续聚合的 select 应该 return 为空结果。