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

news2024/11/24 12:27:00

曾经只会增删改查和内置函数的SQL使用,第一次发现原来自定义函数/存储过程还是非常可以提高效率的。

背景需求
需要为某个schema下的表追加字段。

原始手段:为每个表生成插入字段的SQL,执行,要粘贴好多遍表名 /  手工一个一个表加,很累!!!

存储过程改进(真的救了命了):

1 定义存储过程

-- 用于声明函数名及需要的参数。需要注意参数格式:(变量名1 变量类型 , 变量名2 变量类型,…)
create or replace function "public"."table_append_fields"("schema_name" varchar,"field_name" varchar,"field_type" varchar)

    -- 声明返回值的类型。注意这里是returns, 两个美元符中间可以填入符合命名规则的任意字符,如$body$ (注意上下保持一致性)
	returns "pg_catalog"."void" as $BODY$
        -- declare表示声明变量,可以声明多个变量,此处声明了字符d
		declare d varchar;

        --  声明了一个数组类型的变量并赋了值,值取自SQL查询不包含某字段的表名信息(避免重复插入表字段)。
		declare pg_tables varchar[] := array(
			select tablename
			from pg_tables
			where schemaname = schema_name
				and tablename not in (select distinct table_name from information_schema.columns where column_name = field_name)
		);

	-- begin表示语句开始
	begin
        -- for循环数组(表名),执行插入表字段SQL
	    foreach d in array pg_tables loop 
	    execute format ( 'ALTER TABLE %I.%I ADD COLUMN %I %I ', schema_name, d, field_name, field_type);

        -- 结束循环
		end loop;

    -- end表示语句结束
	end;

-- 同上方的 $BODY$ 命名一致
$BODY$

  --  声明该存储过程使用的语言。注意不是'sql'
  language plpgsql volatile
  cost 100

2.执行生成存储过程

将上述SQL执行一下,就可以看到定义好的函数啦

3.使用存储过程

执行下方SQL测试

SELECT public.table_append_fields('public','age','int2');

SELECT public.table_append_fields('public','name','varchar');

执行前,表中字段

 执行后,表中字段

举一反三,以后就会定义自定义函数啦!!!

详细的参数类型可以查看教程
PostgreSQL 数据类型 | 菜鸟教程 (runoob.com)icon-default.png?t=N3I4https://www.runoob.com/postgresql/postgresql-data-type.html还有些详细的使用方法下面的博客也有说明

PostgreSQL的存储过程及基本使用_postgresql存储过程调用_NMAZMMF的博客-CSDN博客icon-default.png?t=N3I4https://blog.csdn.net/mr_door/article/details/102527225

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/518782.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【K8S系列】快速初始化⼀个最⼩集群

序言 走得最慢的人,只要不丧失目标,也比漫无目的地徘徊的人走得快。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记一级重要蓝色:用来标记二级重要 希望这篇文章能让你不仅有…

华为OD机试真题 Java 实现【贪心的商人】【2023Q1 100分】

一、题目描述 商人经营一家店铺,有number种商品,由于仓库限制每件商品的最大持有数量是item[index],每种商品的价格在每天是item_price[item_index][day],通过对商品的买进和卖出获取利润,请给出商人在days天内能获取…

扫雷---C语言

目录 前言: 1.认识扫雷 1.1游戏构思 1.2碎碎念 2.扫雷接口实现 2.1菜单打印 2.2创建标识符常量和初始化数组 2.3打印棋盘 2.4随机埋雷 2.5排查雷 3.源码 3.1头文件和函数原型声明game.h 3.2游戏函数实现game.c 3.3测试代码文件test.c ❤博主CSDN:啊…

HEVC编码标准介绍

视频编码标准的发展历程 目前已经有H266、AVS3、AV1等新编码标准。 H264的编码劣势 宏块个数的爆发式增长,会导致用于编码宏块的预测模式、运动矢量、参考帧索引、量化等宏块级参数信息所占用的码字过多,用于编码残差部分的码字明显减少;…

C++实现并查集

1.并查集原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个 单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一 个元素归属于那个集合的运算。适合于描述这类…

编译原理----词法分析设计

程序设计实验1 词法分析 一、实验目的: 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 二、实验内容 编制一个单词获取程序,从文件…

门店销售干货 | 4种不同类型的顾客VS销售技巧,直接套用!

“我就路过随便看看” “我在别人家看到的更便宜” “我自己看,你不要跟着我” “我下次再买” …… 在日常的门店经营过程中,你是否经常遇到不同类型的顾客,用各种不同的话拒绝你,最后成交的寥寥无几。 面对不同这样不同类型…

java异常总结

java异常总结 什么是异常? 在Java中,将程序执行过程中发生的不正常行为称为异常。 常见异常举例 1.算数异常ArithmeticException public class Test{public static void main(String[] args) {System.out.println(10/0);} }报错 ArithmeticExcept…

webhub123整理 中文语音识别数据集​

我们收集和整理了常用的中文语音识别数据集,合计超过12000小时的数据集。已经按照不同来源整理收录到 webhub123整理 中文语音识别数据集​https://www.webhub123.com/#/home/detail?projectHashid64335220&ownerUserid22053727 整理后的效果如下 ​ 每个卡片…

mysql Lock wait timeout exceeded; try restarting transaction

文章目录 一、mysql死锁及超时的原因二、mysql死锁排查思路1、show full processlist 查询当前数据库全部线程2、information_schema 一、mysql死锁及超时的原因 当在业务逻辑中看到这个错误,或者mysql中使用update语句更新数据报错: Lock wait timeout…

数影周报:丰田215万名日本客户信息被无意泄露,菜鸟将于明年初在港IPO

本周看点:丰田215万名日本客户信息被无意泄露;美光宣布吴明霞出任美光中国区总经理;谷歌将向Gmail用户提供暗网数据泄露报告;淘宝天猫集团架构调整完成;菜鸟计划于2024年初在香港IPO...... 数据安全那些事 丰田215万名…

体验了基于ChatGPT的谷歌翻译插件后,我把其他翻译插件移除了

最近,一个基于 ChatGPT 的谷歌浏览器翻译插件挺火的,我体验了下,总结下来就一个字“666”。 github 上已经有 14.9k 的 star 了 传送门:GitHub - yetone/openai-translator: 基于 ChatGPT API 的划词翻译浏览器插件和跨平台桌面端…

AI学术界无人后继?高校毕业生纷纷进厂,全是香饽饽

来源 | 新智元 微信号:AI-era 【导读】近日,有外媒对一批美国名校的大学生和教授进行了采访。结果显示,高校毕业生入职科技公司已成主流。 AI火,搞AI的人就火。 这不,据Insider最近的一次采访报道,科技类…

Vue3-黑马(五)

目录: (1)vue3-基础-axios-拦截器 (2)vue3-基础-条件与列表 (3)vue3- 基础-监听器 (1)vue3-基础-axios-拦截器 我们自己创建axios对象有一个好处,就是可以…

[译] Flutter 3.10 的新功能

[译] Flutter 3.10 的新功能 原文 https://medium.com/flutter/whats-new-in-flutter-3-10-b21db2c38c73 无缝的Web和移动端集成,Impeller稳定版的突破性图形性能,以及更多 欢迎使用Flutter 3.10!我们非常期待展示我们令人惊叹的Flutter社区所…

java可视化开发工具好用不好用?

java可视化开发工具到底好用不好用?这是不少粉丝朋友经常询问到的一个问题。在数字化发展趋势越发明显的当下,java可视化开发工具可以帮助各中大型企业实现转型升级,它的灵活、简洁、易操作、可视化等功能优势,让很多客户朋友欣慰…

OLYMP‘ARTS 2023奥艺大会中国推介会在北京盛大举行

北京时间2023年5月11日16时,以“艺术连接世界”为主题的OLYMPARTS 2023 国际奥艺大会中国推介会在北京盛大举行。此次活动由国际奥艺委员会(WOAC)指导支持,共邀请了国外驻华机构、文旅部、央国企、国内外协会机构、知名艺术家代表…

【项目源码】智慧班牌源码 家校互联小程序源码 智慧校园云平台

智慧校园平台源码 智慧班牌源码 人脸识别技术 电子班牌源码 家校互联小程序源码 源码开发环境:Javaspringbootvueelement-uimysql 智慧校园系统定位于中小学教育学校,侧重实际应用,讲究实际,突出加强校园安全监管,德…

【数值模型系列】CMAQ全局属性修改

一、问题产生 在做一个月的浓度预测时,由于GFS只能预报16天左右,因此需要使用CFS气象数据来驱动WRF模型,但CFS在WRF4.x版本有问题,因此重新装了WRF3.9.1版本的WRF。 而我这里的CMAQ ICON会去取前一天的CCTM CONC制作新的ICON文件…

ImageBind 横跨六种数据模式,用向量统一 AI 语言

出品人:Towhee 技术团队 作者:顾梦佳 人工智能(AI)最近毋庸置疑又迎来了一个高速发展的浪潮。 目前,人工智能的应用已经渗透到各个领域,包括自然语言处理、计算机视觉、语音识别、机器人技术等,…