本文主要是介绍【PostgreSQL】利用的存储过程为多个库表修改字段,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
提高效率存储过程,在某个schema下相同字段备注修改一致,原先也是一张张表改,后来十几张表,只好进行存储过程处理
存储过程
CREATE OR REPLACE FUNCTION "public"."update_all_column_comment"("schema_name" varchar, "field_name" varchar, "field_comment" varchar)RETURNS TABLE("message" text) AS $BODY$-- RETURNS "pg_catalog"."void" AS BODY-- declare表示声明变量,可以声明多个变量,此处声明了字符ddeclare table_name_temp varchar;declare success bool;-- 声明了一个数组类型的变量并赋了值,值取自SQL查询不包含某字段的表名信息(避免重复插入表字段)。declare pg_tables varchar[] := array(select tablenamefrom pg_tableswhere schemaname = schema_name);-- begin表示语句开始begin-- 默认设置为成功success := true;-- for循环数组(表名),执行插入表字段SQLforeach table_name_temp in array pg_tables loop -- 设置字段注释BEGIN-- raise notice 'COMMENT ON COLUMN %.%.% IS %;', schema_name, table_name_temp, field_name, field_comment;execute format ( 'COMMENT ON COLUMN %I.%I.%I IS %L;', schema_name, table_name_temp, field_name, field_comment);EXCEPTION WHEN others THEN-- 如果出现异常,设置为失败,并记录错误消息success := false;-- RAISE NOTICE 'Failed to update comment for table % and column %', table_name_temp, field_name;message := 'Failed to update comment for table ' || table_name_temp || ' and column ' || field_name;RETURN NEXT;END;-- 结束循环end loop;-- 如果成功,返回成功消息IF success THENmessage := 'All column comments updated successfully';END IF;RETURN NEXT;-- end表示语句结束end;
-- 同上方的 BODY 命名一致
$BODY$LANGUAGE plpgsql VOLATILECOST 100ROWS 1000
执行
SELECT public.update_all_column_comment('public', 'del_flag', '删除标记,0未删除默认,1已删除');
参考
利用PostgreSQL的存储过程为多个库表增加固定字段
这篇关于【PostgreSQL】利用的存储过程为多个库表修改字段的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!