postgresql 數據庫 TimescaleDB 修改分區時間(範圍)

postgresql 數據庫 TimescaleDB 超表修改分區時間(範圍)


今天遇到一個問題 之前用TimescaleDB創建的超表 是已7天爲單位的 由於7天的數據量過大 影響查詢效率 需要把7天的分區改爲一天一分區
在這裏插入圖片描述

創建超表 create_hypertable()

1.創建普通版表

CREATE TABLE "超表名" (
  "collect_time" timestamp(6) NOT NULL,
  "code" varchar(36) COLLATE "pg_catalog"."default" NOT NULL,
  "value" numeric(14,4) NOT NULL,
  "create_time" timestamp(6) NOT NULL
)
;

2.改爲超表 create_hypertable()

SELECT create_hypertable('超表名', 'collect_time', chunk_time_interval => INTERVAL '7 day');

3.插入數據

INSERT INTO 超表名("collect_time", "code", "value",  "create_time") VALUES ('2020-10-15 16:35:00', '22255220522', '23.4672',  '2020-10-14 16:35:26.659');
INSERT INTO 超表名("collect_time", "code", "value",  "create_time") VALUES ('2020-10-16 16:35:00', '26622569666', '0.1085',  '2020-10-14 16:35:27.546');
INSERT INTO 超表名("collect_time", "code", "value",  "create_time") VALUES ('2020-10-13 16:35:00', '525941155555', '25.0549',  '2020-10-14 16:35:28.473');
INSERT INTO 超表名("collect_time", "code", "value",  "create_time") VALUES ('2020-10-14 16:35:00', '744445411114', '0.0000',  '2020-10-14 16:35:24.01');
INSERT INTO 超表名("collect_time", "code", "value",  "create_time") VALUES ('2020-10-12 16:35:00', '774484457444', '0.0000',  '2020-10-14 16:35:23.032');

查看分區,你會發現這些數據在2個分區內

修改分區 set_chunk_time_interval()

一.查看分區情況

1.查看_timescaledb_catalog.dimension 表

SELECT * FROM "_timescaledb_catalog"."dimension"

在這裏插入圖片描述
interval_length上顯示 604800000000 (TIMESTAMP類型)意思是一週
2.查看分區塊狀態
查看 dimension_slice 表
在這裏插入圖片描述
轉換時間戳
1602720000000000 2020-10-15 08:00:00
1603324800000000 2020-10-22 08:00:00
這裏可以看到分區是7天的







二.修改分區時間 set_chunk_time_interval()

1.修改分區時間

SELECT set_chunk_time_interval('超表名', interval '24 hours');

2.插入數據驗證

INSERT INTO 超表名("collect_time", "code", "value", "create_time") VALUES ('2021-1-14 16:35:00', '375222D001', '27.7932', '2020-10-14 16:35:15.011');
INSERT INTO 超表名("collect_time", "code", "value", "create_time") VALUES ('2021-1-15 16:35:00', '3715044111', '0.0000',  '2020-10-14 16:35:20.389');
INSERT INTO 超表名("collect_time", "code", "value", "create_time") VALUES ('2021-1-16 16:35:00', '202Q0019QT001', '0.3663',  '2020-10-14 16:35:19.087');
INSERT INTO 超表名("collect_time", "code", "value", "create_time") VALUES ('2021-1-17 16:35:00', '3702000284441', '22.2946',  '2020-10-14 16:35:15.035');
INSERT INTO 超表名("collect_time", "code", "value", "create_time") VALUES ('2021-1-18 16:35:00', '37075225555501', '0.3022',  '2020-10-14 16:35:24.041');
INSERT INTO 超表名("collect_time", "code", "value", "create_time") VALUES ('2021-1-19 16:35:00', '25555222206001', '0.0000',  '2020-10-14 16:35:23.956');

三.查看 修改結果

查看_timescaledb_catalog.dimension 表在這裏插入圖片描述
變成 86400000000 了
2.查看分區
分區也多了
在這裏插入圖片描述
還有第2種(未測試)
我想能不能直接"_timescaledb_catalog".“dimension” 表的 interval_length 字段直接 改爲86400000000







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章