我对创建物化视图WITH NO DATA的理解是,在我或我设置的策略刷新视图之前,不会加载任何记录。但是,当使用timescaledb并提供此选项时,我可以立即对表进行查询,似乎正在加载记录。
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时,不管我运行了什么查询,它似乎都完全刷新了。我是不是误解了这是如何工作的?
发布于 2021-08-01 20:02:43
我假设是TimescaleDB 2.x,因为这个问题引用了最新的文档。
连续聚合的默认行为是使用real time aggregation feature,它用在原始超表上运行的视图查询的结果来补充物化数据。因此,在空的连续聚合的情况下(如问题所示),对视图的选择将查询原始超表。
可以通过在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应返回空结果。
https://stackoverflow.com/questions/68611644
复制相似问题