PG数据库创建分区表
-- 创建自增序列号
CREATE SEQUENCE dw_dwm_cdt_device_day_detail_id_seq1 INCREMENT BY 1;
-- 创建主表,PARTITION BY RANGE为分区字段
CREATE TABLE "public"."dw_dwm_cdt_device_day_detail" (
"id" int8 NOT NULL DEFAULT nextval('dw_dwm_cdt_device_day_detail_id_seq1'::regclass),
"basic_info_id" int8 NOT NULL,
"time_zone" int2 NOT NULL,
"date" int8 NOT NULL,
"type" int2,
"group_name" int8,
"start_time" int8,
"end_time" int8,
"duration" int8,
"create_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP,
"update_time" timestamp(6) DEFAULT CURRENT_TIMESTAMP
)
PARTITION BY RANGE (
"date" "pg_catalog"."int8_ops"
)
;
-- 创建分区
CREATE TABLE dw_dwm_cdt_device_day_detail_p202404 PARTITION OF dw_dwm_cdt_device_day_detail
FOR VALUES FROM ('20240401') TO ('20240501');
CREATE TABLE dw_dwm_cdt_device_day_detail_p202405 PARTITION OF dw_dwm_cdt_device_day_detail
FOR VALUES FROM ('20240501') TO ('20240601');
数据在中间节点时候怎么存储:
比如:对于日期为20250201
的数据,它实际上会属于dw_dwm_cdt_device_day_detail_p202502
分区。
这是因为在分区定义中,每个分区都包含一个左闭右开的区间。对于dw_dwm_cdt_device_day_detail_p202501
分区,它的范围是['20250101', '20250201')
,这意味着它包含从20250101
开始到20250201
之前(不包括20250201
)的所有日期。而dw_dwm_cdt_device_day_detail_p202502
分区的范围是['20250201', '20250301')
,它包含从20250201
开始到20250301
之前(不包括20250301
)的所有日期。
因此,20250201
这一天的数据会落在dw_dwm_cdt_device_day_detail_p202502
分区内。