首页 > 解决方案 > 如何为 Timescale 中的现有表创建物化视图?

问题描述

当我尝试通过查询为现有表创建物化视图时:

CREATE MATERIALIZED VIEW current_data_hourly
WITH (timescaledb.continuous) AS
SELECT id,
        time_bucket(INTERVAL  '1 hour', creation_time) AS creation_time,
       AVG(current_abs_1_avg),
       MAX(current_abs_1_max),
       MIN(current_abs_1_min)
FROM time_series.current_data
GROUP BY id, creation_time;

我越来越:

ERROR:  continuous aggregate view must include a valid time bucket function
SQL state: XX000

有什么建议可能是错的吗?

标签: postgresqltimescaledb

解决方案


在上面的视图查询中,输入列名(creation_time位于 hypertabletime_series.current_data中)和输出列名(定义为)之间的分组不明确time_bucket(INTERVAL '1 hour', creation_time) AS creation_time。根据文档GROUP BY中的描述:SELECT

如果有歧义,GROUP BY 名称将被解释为输入列名称而不是输出列名称。

creation_time不是那个,是time_bucker表达式的别名。因此错误。

一种解决方法是使用 SELECT 子句中列的位置:

CREATE MATERIALIZED VIEW current_data_hourly
WITH (timescaledb.continuous) AS
SELECT id,
        time_bucket(INTERVAL  '1 hour', creation_time) AS creation_time,
       AVG(current_abs_1_avg),
       MAX(current_abs_1_max),
       MIN(current_abs_1_min)
FROM time_series.current_data
GROUP BY 1, 2;

推荐阅读