【PostgreSQL】利用的存储过程为多个库表修改字段

news/2024/7/9 22:37:33 标签: 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的存储过程为多个库表增加固定字段


http://www.niftyadmin.cn/n/5477144.html

相关文章

使用阿里云试用Elasticsearch学习:3.6 处理人类语言——同义词

词干提取是通过简化他们的词根形式来扩大搜索的范围,同义词 通过相关的观念和概念来扩大搜索范围。 也许没有文档匹配查询 “英国女王“ ,但是包含 “英国君主” 的文档可能会被认为是很好的匹配。 用户搜索 “美国” 并且期望找到包含 美利坚合众国 、…

DNS以及dnsmasq 搭建 dns 局域网(1)

dns ip地址的概念 如果你的电脑数量比较多尼? 明确每台机器出在网络的地址信息,明确每台电脑的门牌号 计算机在网络中发送数据的效果(送快递) (你)得明确户主所在的小区地址,几号楼,单元号,几零几,快递才…

Dify开源大语言模型(LLM) 应用开发平台如何使用Docker部署与远程访问

文章目录 1. Docker部署Dify2. 本地访问Dify3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 本文主要介绍如何在Linux Ubuntu系统以Docker的方式快速部署Dify,并结合cpolar内网穿透工具实现公网远程访问本地Dify! Dify 是一款…

Redis7(二)数据类型及其用法

一、概述 命令不区分大小写&#xff0c;key区分大小写 数据类型针对value String List Set Hash ZSet bitmap GEO HyperLogLog Stream bitfield 二、String <K,V> 1、设值/取值 getrange key index1 index2 getrange key 0 -1//获取所有的值 SETRANGE KEY_N…

Node.js 的安装与配置指南

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;它使得开发者可以使用 JavaScript 来编写服务器端的代码。Node.js 的非阻塞、事件驱动的特性使其成为构建高性能网络应用的理想选择。本文将详细介绍如何**安装和配置** Node.js&#xff0c;以及如何设置 …

12个建筑数据分析典型用例

建筑企业面临着众多挑战&#xff0c;包括紧迫的期限、预算限制和复杂的监管要求。 然而&#xff0c;很明显&#xff0c;数据分析可以成为克服这些障碍的重要工具。 建筑行业是数据最密集的市场之一&#xff0c;这就是为什么越来越需要更好的建筑分析和大数据管理。 通过大数据…

HarmonyOS 应用开发-使用colorPicker实现背景跟随主题颜色转换

介绍 本示例介绍使用image库以及effectKit库中的colorPicker对目标图片进行取色&#xff0c;将获取的颜色作为背景渐变色&#xff0c;通过swiper组件对图片进行轮播&#xff0c; 效果图预览 使用说明 直接进入页面&#xff0c;对图片进行左右滑动&#xff0c;或者等待几秒&a…

Vuex与Pinia的区别

Vuex和Pinia都是Vue.js状态管理库&#xff0c;但它们有一些区别。 1. 架构设计&#xff1a;Vuex是Vue.js官方提供的状态管理库&#xff0c;而Pinia是由Vue作者维护的另一个状态管理库。Vuex采用了集中式的架构&#xff0c;将所有的状态存储在一个单一的全局状态树中&#xff0…