Database 存储过程是否在Postgres中的数据库事务中运行?
如果存储过程中途失败,那么SP开始时的更改是隐式回滚的,还是我们必须编写任何显式代码以确保SP仅在数据库事务中运行?严格来说,Postgres在版本11之前的ISO/IEC标准中没有定义。这个术语经常被错误地用来指,它提供了与其他RDBMS提供的“存储过程”相同的功能(甚至更多)。主要区别在于事务处理Database 存储过程是否在Postgres中的数据库事务中运行?,database,postgresql,stored-procedures,transactions,relational-database,Database,Postgresql,Stored Procedures,Transactions,Relational Database,如果存储过程中途失败,那么SP开始时的更改是隐式回滚的,还是我们必须编写任何显式代码以确保SP仅在数据库事务中运行?严格来说,Postgres在版本11之前的ISO/IEC标准中没有定义。这个术语经常被错误地用来指,它提供了与其他RDBMS提供的“存储过程”相同的功能(甚至更多)。主要区别在于事务处理 Postgres 11最终引入了True: 在Postgres中是原子的,除非在外部事务中调用,否则会自动在自己的事务中运行它们总是在单个事务中运行,并完全成功或失败。因此,无法在函数
VACUUM
、CREATE DATABASE
或CREATE INDEX concurrent
函数和触发过程始终在
由外部查询建立的事务-它们无法启动或关闭
提交该事务,因为没有上下文可供它们提交
执行。但是,包含异常
子句的块
有效地形成一个子事务,该子事务可以回滚而无需
影响外部交易
默认情况下,PL/pgSQL函数中发生的任何错误都将中止
功能的执行,以及周围事务的执行
也您可以使用BEGIN
用异常
子句阻塞
存在例外情况,包括但不限于:
- 写入日志文件的数据
-
重要:某些PostgreSQL数据类型和函数具有特殊规则
关于交易行为。特别是,对
序列(因此使用
声明的列的计数器) 对所有其他事务都立即可见,并且不会滚动 如果进行更改的事务中止,返回serial
- 准备好的发言
- 演示
- dblink调用(或类似调用)