PostgreSQL存储过程中怎么利用BEGIN块处理事务
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,PostgreSQL存储过程中怎么利用BEGIN块处理事务,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、用BEGIN块模拟随便建个表
千家信息网最后更新 2026年11月03日PostgreSQL存储过程中怎么利用BEGIN块处理事务
PostgreSQL存储过程中怎么利用BEGIN块处理事务,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
1、用BEGIN块模拟
随便建个表:
CREATE TABLE a(col1 int);
存储过程如下:
CREATE OR REPLACE FUNCTION ins_t() RETURNS voidAS $$BEGIN INSERT INTO a VALUES(100); BEGIN INSERT INTO a VALUES(200); RAISE 'any error'; EXCEPTION WHEN others THEN null; END;END;$$ LANGUAGE plpgsql;
测试:
flying=# SELECT ins_t(); ins_t-------(1 row)flying=# SELECT * FROM a; col1------ 100(1 row)
可以看到,内嵌BEGIN块中的INSERT操作并没有生效。
2、PL/pgSQL如何实现
块定义在pl_gram.y中,有兴趣可以自己去看,块的执行代码位于 src/pl/plpgsql/src/pl_exec.c。
static intexec_stmt_block(PLpgSQL_execstate *estate, PLpgSQL_stmt_block *block){... if (block->exceptions) {... BeginInternalSubTransaction(NULL);... PG_TRY();... PG_CATCH();... RollbackAndReleaseCurrentSubTransaction();...只有当块定义有EXCEPTION部分,才会出现创建子事务的动作,否则(它对应的else分支内)只会当做普通语句处理。抛出例外时,就把这个子事务会滚掉。
而如果不抛出例外,而是WARNING或者NOTICE之类,也不会引起它的回滚,尝试一下就知道。PG怎么知道要不要回滚,关键在PG_TRY,这个说起来话长,暂时了解到这里足够。
3、没有EXCEPTION处理会怎样
去掉例外处理部分
CREATE OR REPLACE FUNCTION ins_t() RETURNS voidAS $$BEGIN INSERT INTO a VALUES(100); BEGIN INSERT INTO a VALUES(200); RAISE 'any error'; END;END;$$ LANGUAGE plpgsql;
结果什么都没有,因为它没有启用子事务,所以会全部回滚。
flying=# select ins_t();ERROR: any errorCONTEXT: PL/pgSQL function ins_t() line 6 at RAISEflying=# select * from a; col1------(0 rows)flying=#
4、神奇的PG_TRY和PG_CATCH
它们用到的是sigsetjmp,PG中很多地方用到它,了解这个可能需要一定的汇编语言知识,也需要了解错误抛出机制,有机会再详细讲。
看完上述内容,你们掌握PostgreSQL存储过程中怎么利用BEGIN块处理事务的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
事务
处理
过程
存储
内容
方法
更多
部分
问题
普通
神奇
束手无策
为此
汇编语言
个子
代码
关键
兴趣
分支
动作
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技园
互联网新科技
互联网下的科技发展
金融科技与互联网金融
远信互联网科技
紫鲸互联网科技
上游互联网科技
上海卓越科技 互联网
一五八零互联网科技
盛创互联网科技有限公司
互联网科技公司的市场部门
银川新华互联网科技职业技术培训学校图片
速维有品互联网信息科技(苏州)有限公司
互联网科技扶贫时间
怎样加入科技互联网
互联网金融科技公司的优势
互联网科技平台产品运营
广西科技产业互联网是什么
科技互联网专业工作会议发言稿
中国主要互联网科技公司
互联网新科技
中国互联网科技工作委员会毛军
互联网络科技有限公司
互联网金融科技创新
沃里互联网科技
互联网科技公司有哪些
须眉科技是互联网公司吗
佳云科技和互联网广告
广州富喜互联网络科技
西安有哪些互联网高科技企业