1

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

我正在关注这些文档:https ://docs.timescale.com/timescaledb/latest/how-to-guides/continuous-aggregate/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然而,无论我运行了什么查询,当访问它时,它似乎都焕然一新。我是否误解了这应该如何工作?

4

1 回答 1

2

我假设 TimescaleDB 2.x 作为问题引用了最新的文档。

连续聚合的默认行为是使用实时聚合功能,它用在原始超表上运行的视图查询结果补充物化数据。因此,在空连续聚合的情况下(如问题中),对视图的选择将查询原始超表。

可以通过在创建timescaledb.materialized_only期间将选项设置为true任一来禁用实时聚合,例如:

CREATE MATERIALIZED VIEW timescaledb_view
WITH (timescaledb.continuous, timescaledb.materialized_only=true) AS
/* Query */
WITH NO DATA;

或通过更改物化视图

ALTER MATERIALIZED VIEW timescaledb_view SET (timescaledb.materialized_only = true);

然后,如果没有手动或通过创建的策略完成具体化,则对连续聚合的选择应返回空结果。

于 2021-08-01T20:02:42.977 回答