首页 > 其他 > 详细

postgres 表格按创建时间水平切分实例

时间:2020-09-25 19:03:57      阅读:70      评论:0      收藏:0      [点我收藏+]

步骤:

  1. 一般我会先创建一个空的触发起函数,为了第二步先创建触发器,和触发器有关联以后,触发器中的new等关键字才能被编辑器识别,方便编辑触发器函数:
create or replace function func_trigger_stock_move_insert()
    returns trigger
as
$$

begin
    
end
$$ language plpgsql volatile;
  1. 创建触发器:
create trigger trigger_insert_stock_move
    before insert
    on stock_move_father
    for each row
    execute procedure func_trigger_stock_move_insert();
  1. 再次编辑触发器函数:
create or replace function func_trigger_stock_move_insert()
    returns trigger
as
$$
declare
    var_sub_table_name character varying;
    var_is_exist       boolean;
    var_sql_create     character varying;
    var_sql_insert     character varying;
    var_date_start     date;

begin
    --     设置本次要插入的表格var_sub_table_name
    var_sub_table_name := ‘stock_move‘ || date_part(‘y‘, new.create_date)::char(4);
-- 设置时间约束
    var_date_start := date_part(‘y‘, new.create_date)::char(4) || ‘-01‘ || ‘-01‘;
    select count(1) into var_is_exist from pg_class where relname = var_sub_table_name;
    if (var_is_exist = false) then
--         创建新的表格.
        var_sql_create := format(‘    create table if not exists %s
    (
         check ( create_date >= %L and create_date <= %L )
    ) inherits (stock_move_father);‘, var_sub_table_name, var_date_start, (var_date_start + interval ‘1 year‘));
        raise notice ‘var_id:%‘,var_date_start;
        execute var_sql_create;
    end if;

    var_sql_insert = format(‘insert into %I select $1.*;‘, var_sub_table_name);
    execute var_sql_insert using new;

    --     表格创建完成后插入数据:
    return null;
end
$$ language plpgsql volatile;

到这里,一个按照时间进行水平切分表格的触发器就完成啦.

运行效果:

技术分享图片

postgres 表格按创建时间水平切分实例

原文:https://www.cnblogs.com/qianxunman/p/13731538.html

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