TimescaleDB创建连续聚合时WITH NO DATA不生效如何解决
问题原因
你创建连续聚合时添加了WITH NO DATA但仍有数据自动填充,是因为TimescaleDB默认会为连续聚合自动创建后台刷新策略,即使创建时不主动填充数据,后台刷新任务启动后也会自动同步超表现有数据到聚合视图中。
解决步骤
- 先删除已生成的非空连续聚合视图
DROP MATERIALIZED VIEW IF EXISTS logschema."aggregateValveMovementDaily" CASCADE;
- 重新创建连续聚合,创建时显式关闭自动刷新策略,同时保留
WITH NO DATA参数:
CREATE MATERIALIZED VIEW logschema."aggregateValveMovementDaily" WITH ( timescaledb.continuous, timescaledb.refresh_interval = NULL -- 关闭默认自动刷新任务 ) AS SELECT "ID", time_bucket('1 day', "hour") as "day", COUNT("ID") as "messageCount", min("movement") as "movement_min" FROM logschema."movementHourly" GROUP BY "ID", "day" WITH NO DATA;
如果创建时未指定timescaledb.refresh_interval参数,也可以在创建完成后立刻手动移除默认刷新策略:
SELECT remove_continuous_aggregate_policy('logschema."aggregateValveMovementDaily"');
- 后续需要手动填充数据时,调用
refresh_continuous_aggregate存储过程按需指定刷新范围即可,示例如下:
-- 手动刷新指定时间范围的聚合数据 CALL refresh_continuous_aggregate( 'logschema."aggregateValveMovementDaily"', '2024-01-01'::timestamptz, -- 刷新起始时间 '2024-02-01'::timestamptz -- 刷新结束时间 ); -- 全量手动填充所有历史数据 CALL refresh_continuous_aggregate( 'logschema."aggregateValveMovementDaily"', NULL, NULL );
内容的提问来源于stack exchange,提问作者Paul Müller
相关产品推荐
相关产品推荐

