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

最低0.47元/天 解锁文章
1833

被折叠的 条评论
为什么被折叠?



