postgresql按天创建分区表
postgresql创建分区表由两种方式,一种是通过继承主表的方式创建,另一种通过partition of的方式创建。推荐使用partition of的方式创建,按照继承的方式创建的分区表在查询时分区字段不支持动态的条件查询。比如查询以下按照继承的方式创建的表时:select * from tbl_partition where gather_time > now() and gather_time < now() + interval 1;仍然会进行全表扫描。如果想扫描固定分区只能:select * from tbl_partition where gather_time = ‘20210101’;where条件要跟确定的值才行。
通过继承的方式自动按天创建分区表
- 创建主表:
CREATE TABLE tbl_partition
(
id text,
name text,
data numeric,
gather_time timestamp
);
- 创建可重用的触发器函数
CREATE OR REPLACE FUNCTION auto_insert_into_tbl_partition()
RETURNS trigger AS
$BODY$
DECLARE
id text ;
time_column_name text ; -- 父表中用于分区的时间字段的名称[必须首先初始化!!]
curMM varchar(8); -- 'YYYYMM'字串,用做分区子表的后缀
isExist boolean; -- 分区子表,是否已存在
startTime text;
endTime text;
strSQL text;
BEGIN
-- 调用前,必须首先初始化(时间字段名):time_column_name [直接从调用参数中获取!!]
time_column_name := TG_ARGV[0];
id := TG_ARGV[1];
-- 判断对应分区表 是否已经存在?