一. 创建主表
CTEATE TABLE tb_log( id int, createtime date );
二. 创建分表并继承主表(可以没有check约束)
CREATE TABLE tb_log_20200308
(
CHECK ( createtime >= DATE '2020-03-08'
AND createtime < DATE '2020-03-09' )
)
INHERITS
(
tb_log
)
;
CREATE TABLE tb_log_20200309
(
CHECK ( createtime >= DATE '2020-03-09'
AND createtime < DATE '2020-03-10' )
)
INHERITS
(
tb_log
)
;
三. 创建触发器函数
CREATE OR REPLACE FUNCTION function_insert_tb_log()
RETURNS TRIGGER
AS
$$
BEGIN
IF ( NEW.createtime >= DATE '2020-03-08'
AND
NEW.createtime < DATE '2020-03-09' ) THEN
INSERT INTO tb_log_20200308 VALUES
(NEW.*
)
;
ELSIF ( NEW.createtime >= DATE '2020-03-09'
AND
NEW.createtime < DATE '2020-03-10' ) THEN
INSERT INTO tb_log_20200309 VALUES
(NEW.*
)
;
ELSE
RAISE
EXCEPTION
'Date out of range. Fix the function_insert_tb_log() function!';
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
四. 创建触发器
CREATE TRIGGER trigger_insert_tb_log BEFORE
INSERT
ON
tb_log FOR EACH ROW EXECUTE PROCEDURE function_insert_tb_log()
;
以后每天定时执行第二步第三步就可以实现分表存储每日的数据,主表是不存储数据的,当某个日期的数据不需要时可以直接删除对应日期的分区表