没有数据的物化视图仍在加载数据

Materialized View With No Data still loading data

我对创建物化视图的理解 WITH NO DATA 是在我或我设置的策略刷新视图之前不会加载任何记录。但是,当使用 timescaledb 并提供此选项时,我可以立即查询 table 并且似乎正在加载记录。

我正在关注这些文档:https://docs.timescale.com/timescaledb/latest/how-to-guides/continuous-aggregates/create-a-continuous-aggregate/#create-a-continuous-aggregate

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 为空结果。