自学内容网 自学内容网

【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表示声明变量,可以声明多个变量,此处声明了字符d
declare table_name_temp varchar;
   declare success bool;
    --  声明了一个数组类型的变量并赋了值,值取自SQL查询不包含某字段的表名信息(避免重复插入表字段)。
declare pg_tables varchar[] := array(
select tablename
from pg_tables
where schemaname = schema_name
);
 
-- begin表示语句开始
begin
    -- 默认设置为成功
      success := true;
      -- for循环数组(表名),执行插入表字段SQL
    foreach 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 THEN
        message := 'All column comments updated successfully';
    END IF;
    RETURN NEXT;

  -- end表示语句结束
end;
-- 同上方的 BODY 命名一致
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000

执行

SELECT public.update_all_column_comment('public', 'del_flag', '删除标记,0未删除默认,1已删除');

参考

利用PostgreSQL的存储过程为多个库表增加固定字段


原文地址:https://blog.csdn.net/u010638673/article/details/137516334

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!