首页 > 数据库技术 > 详细

Postgresql 分表

时间:2020-03-08 11:28:44      阅读:87      评论:0      收藏:0      [点我收藏+]

一. 创建主表

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()
;

以后每天定时执行第二步第三步就可以实现分表存储每日的数据,主表是不存储数据的,当某个日期的数据不需要时可以直接删除对应日期的分区表

Postgresql 分表

原文:https://www.cnblogs.com/runbean/p/12441218.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!