PGSQL实现拉链表的存储过程

PGSQL实现拉链表的存储过程

1、表必须有唯一主键,否则拉链不成功
2、函数传入两个参数,第一个参数为表名,第二个参数为主键名
3、过程中会产生两个中间表,不可删除或修改
4、编码不易,记得点赞收藏,如有疑问可留言

CREATE OR REPLACE FUNCTION "public"."incre_data"("original_table_name" varchar, "main_key" varchar)
  RETURNS "pg_catalog"."void" AS $BODY$

DECLARE
    marge_data_records_cursor      refcursor;
    marge_data_record              record;
    target_table_records_has_data  BOOLEAN; --目标表记录
    all_column_cursor cursor for SELECT column_name
                                 FROM information_schema.columns
                                 WHERE table_schema = 'public'
                                   AND table_name = original_table_name;
    all_column_name                varchar; -- 所有列字段名,逗号分隔
    all_column_name_array          varchar[];
    now_column_name                VARCHAR; -- 游标操作变量
    main_table_all_column_name     VARCHAR;
    main_table_all_column_array    VARCHAR[];
    origin_table_all_column_name   VARCHAR;
    origin_table_all_column_array  VARCHAR[];
    compare_table_all_column_name  VARCHAR;
    compare_table_all_column_array VARCHAR[];
    all_column_count               int; --原表数据项
    MAX_TIME_DATE                  timestamp := '9999-12-31 00:00:00'; --拉链表默认最大时间
    NOW_TIME_DATE                  timestamp := now(); --当前时间
BEGIN
    execute format(
            'SELECT count(*) FROM information_schema.columns WHERE 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个小白QAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值