概括
我遇到了一个问题,即物化视图的行限制超过了 Postgres 数据库中允许的最大值。
描述
命名的表PAC4200_Metering
有 108 个字段,都是双精度字段。我想存储一个表的物化缓存,我在其中存储一个 JSON 对象,其中包含时间段内字段的平均值、最大值、最小值等键。
SELECT
"deviceId",
time_bucket('1 hours', "time") as starttime,
json_build_object(
'average', avg("voltage_an"),
'maxvalue', max("voltage_an"),
'minvalue', min("voltage_an"),
'sum', sum("voltage_an"),
'firstvalue', first("voltage_an", "time"),
'firsttime', min("time" AT TIME ZONE 'UTC'),
'lasttime', max("time" AT TIME ZONE 'UTC'),
'lastvalue', last("voltage_an", "time"),
'sd', stddev_pop("voltage_an") ,
'countgood', COUNT(*),
'countbad', 0,
'countuncertain', 0
) AS "voltage_an"
...
FROM
"PAC4200_Metering"
GROUP BY
"deviceId",
starttime
错误响应:
INFO: new materialization range for public.PAC4200_Metering larger than allowed in one run, truncating (time column time) (1568760300000000)
INFO: new materialization range for public.PAC4200_Metering (time column time) (1568708100000000)
INFO: materializing continuous aggregate public.PAC4200_Metering_15_minute: new range up to 1568708100000000
ERROR: row is too big: size 12456, maximum size 8160
CONTEXT: SQL statement "INSERT INTO _timescaledb_internal._materialized_hypertable_1108 SELECT * FROM _timescaledb_internal._partial_view_1108 AS I WHERE I.starttime >= '-infinity' AND I.starttime < '2019-09-17 08:15:00+00';"
SQL state: 54000
我尝试过的替代方法
我没有将 JSON 对象填充为 JSON 对象,而是尝试将 JSON 对象中的每个键(平均值、最小值、最大值等...)存储为类似于“voltage_an_avg”、“voltage_an_min”、“voltage_an_max”的字段,然后访问它们以这种方式,但我仍然遇到同样的限制。
主要问题/解决方案
- 有没有办法增加这个行大小限制?(如果这甚至是好的做法)
- 有没有更好的方法来存储这些值...