Postgres 中的存储过程是否在数据库事务中运行?

2023-12-03

如果存储过程在中间失败,那么从 SP 开头开始的更改是否会隐式回滚,或者我们是否必须编写任何显式代码来确保 SP 仅在数据库事务中运行?


严格来说,Postgres 并没有have 存储过程如 ISO/IEC 标准第 11 版之前的定义。该术语经常被错误地用来指代功能,它提供了与其他 RDBMS 提供的“存储过程”相同的功能(甚至更多)。主要区别在于事务处理。

  • “存储过程”和“存储函数”有什么区别?

True 存储过程最终在 Postgres 11 中引入:

  • 何时使用存储过程/用户定义函数?

功能 are atomic在 Postgres 中。它们总是在事务上下文中运行并成功或失败完全地.因此,人们无法在函数内开始或提交事务。和命令像VACUUM, CREATE DATABASE, or CREATE INDEX CONCURRENTLY不允许不在事务上下文中运行。

PL/pgSQL 手册:

函数和触发器过程总是在一个 由外部查询建立的事务 - 它们无法启动或 提交该事务,因为他们没有上下文可以提交该事务 执行。但是,包含EXCEPTION条款 有效地形成一个可以回滚的子事务,而无需 影响对外交易。

错误处理:

默认情况下,PL/pgSQL 函数中发生的任何错误都会中止 函数的执行,以及周围事务的执行 以及。您可以使用以下方法捕获错误并从中恢复:BEGIN块与EXCEPTION clause.

例外情况, 包括但不仅限于:

  • 写入日志文件的数据

  • 对序列所做的更改

    重要的:一些 PostgreSQL 数据类型和函数有特殊规则 关于交易行为。特别是,对 序列(因此使用声明的列的计数器serial) 对所有其他交易立即可见并且不会滚动 如果进行更改的事务中止,则返回。

  • 准备好的陈述
    SQL小提琴 demo

  • dblink 调用(或类似)

    • Postgres 是否支持嵌套或自治事务?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Postgres 中的存储过程是否在数据库事务中运行? 的相关文章

  • 插入后用触发器更新多行(sql server)

    我有一个表 orderDetails 包含订单的产品 产品编号 color size quantity 和一个表库存 产品编号 size color stock 订单完成后 我使用此查询将项目插入表中orderDetails INSERT
  • 什么时候不应该使用 Cassandra? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 相关话题已经有很多讨论了卡桑德拉 http cassandra apache org lately Twitter Digg Facebook
  • CloudKit 通过 cron 作业发送推送通知?

    我正在创建一个大学餐饮菜单应用程序 在其中我需要根据每日菜单发送推送通知 最初 我计划通过 Heroku 将用户数据存储在数据库中 并使用 cron 作业将数据库中的数据与每日菜单进行比较 并向用户发送适当的通知 然而 在 Cloudkit
  • Gorm 总是返回带有 nil 值的结构

    我正在使用 Gorm 构建 Go Web API 作为 Amazon RDS 中 Postgresql 数据库的 ORM 问题是 Gorm 总是返回一片结构 其值全部为零 尽管数据库已经填充了数据 切片中的结构体数量是否合适取决于LIMIT
  • 如何查找 PostgreSQL 数据库的上次更新时间?

    我正在使用一个批量更新的 postgreSQL 数据库 我需要知道数据库 或数据库中的表 上次更新或修改的时间 两者都可以 我看到 postgreSQL 论坛上有人建议使用日志记录并查询日志 这对我不起作用 因为我无法控制客户端代码库 你可
  • 数据库错误:值对于类型字符变化来说太长(100)

    我有一个 Django 网站 运行我们几年前在内部构建的迷你 CMS 它使用 postgresql 保存简单的标题和一段文本时 出现以下错误 value too long for type character varying 100 奇怪的
  • 如何在 pgAdmin III 中为多个表生成 CREATE 脚本?

    在 pgAdmin III 中您可以 右键单击表格 scripts 创建脚本 从 SQL 编辑器保存脚本 如果必须对多个表执行此操作 是否有一种方法可以将脚本合并到一个文件中 除了手动复制粘贴它们之外 如果这可以通过 psql 提示符或 p
  • PHP 中的 MongoDB - 如何将项目插入集合中的数组中?

    这必须很容易 但我似乎无法弄清楚 假设我有一个集合users这是集合中的第一项 id ObjectId 4d8653c027d02a6437bc89ca name Oscar Godson email email protected cdn
  • Scrapy - 持续从数据库中获取要爬取的url

    我想不断地从数据库中获取要爬行的网址 到目前为止 我成功地从基地获取了 url 但我希望我的蜘蛛继续从该基地读取 因为该表将由另一个线程填充 我有一个管道 一旦爬行 工作 就会从表中删除 url 换句话说 我想使用我的数据库作为队列 我尝试
  • 查找 PostgreSQL 中所有范围集合的所有交集

    我正在寻找一种有效的方法来查找时间戳范围集之间的所有交集 它需要与 PostgreSQL 9 2 配合使用 假设这些范围代表一个人可以见面的时间 每个人都可以有一个或多个空闲时间范围 我想找到all可以召开会议的时间段 即所有人都有空的时间
  • 如何使用 typeorm 在 postgres 中保存 json 对象数组

    我正在尝试在 postgres 中保存 jsonb 类型的对象数组 Entity Column type jsonb array true nullable true testJson object 我在邮递员中发送的json testJs
  • 插入触发器最终在分区表中插入重复行

    我有一个分区表 我认为 适当的INSERT触发器和一些限制 不知何故 INSERT语句为每个语句插入 2 行INSERT 一个用于父分区 一个用于相应的分区 设置简要如下 CREATE TABLE foo id SERIAL NOT NUL
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 独立对列进行排序,使得所有空值都位于每列的最后

    这是一个名为的示例表animal name color fox brown fox red dog gold 现在 我想要的是这样的结果 fox dog brown gold red 名称应该是结果的列 不同颜色值作为行 我的第一个想法是
  • hibernate锁等待超时超时;

    我正在使用 Hibernate 尝试模拟对数据库中同一行的 2 个并发更新 编辑 我将 em1 getTransaction commit 移至 em1 flush 之后我没有收到任何 StaleObjectException 两个事务已成
  • 用户登录时的 Postgresql 触发器

    我正在尝试找出一种方法来了解用户何时登录 Postgres 数据库 有没有办法定义用户登录数据库时触发的触发器 或者是否有一个表或系统视图在任何人登录数据库时都会更新 登录钩子 https github com splendiddata l
  • 使用 where 进行 select 语句时,HSQLDB 用户缺乏权限或未找到对象错误

    我的数据库使用 SQuirrel SQL 客户端版本 3 5 3 和 HSQLDB 我已经能够为其指定相应的驱动程序 内存中 并创建一个别名 我创建了一个表 CREATE TABLE ENTRY NAME VARCHAR 100 NOT N
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • 在 JUnit 中使用 Spring 测试服务时如何回滚数据库事务?

    我测试我的 DAO 和服务没有问题 但是当我测试时INSERTs or UPDATE我想回滚事务而不影响我的数据库 我在用着 Transactional在我的服务中管理交易 我想知道 是否有可能知道事务是否正常 但回滚它以防止更改数据库 这
  • 无法连接到数据库 - Postgres Job Scheduling 发布(基于 Windows 的计算机)

    我在互联网上搜索这个问题 但找不到正确的答案 这link https stackoverflow com questions 35410829 postgresql9 4 scheduling agent pgagent couldnt g

随机推荐

  • 处理日期/时间和时区的奇怪时间偏移

    我一直在尝试编写一些函数来根据谷歌电子表格上多个单元格的信息创建谷歌日历和谷歌日历事件 发布的第一期here日期部分已经得到解决 现在我在时间部分遇到问题 下面的代码 var ss SpreadsheetApp getActiveSprea
  • 有人可以向我解释一下这是什么类型吗? [复制]

    这个问题在这里已经有答案了 我发现了这种排序 有人可以向我解释一下它是什么类型吗 我认为这是选择排序对吗 嵌套循环如何工作 for i 0 i lt N i for j i 1 j lt N j if toSort i gt toSort
  • 数据总是在变化(SQL Server Management Studio)

    我正在使用 SQL Server Management studio 并不断收到相同的错误 摆脱它的唯一方法 通常 是重置 SQL Server 这非常烦人 有时在我的远程计算机上是不可能的 当我向表中添加一行 然后转到 编辑前 200 行
  • 在 PuTTY 中启动 SSH 连接,运行命令,并使会话保持活动状态

    我想每次通过 PuTTY SSH 到服务器时运行一些 shell 命令 我正在连接到由其他人管理的生产 Web 服务器 并且我不想在那里存储我自己的脚本 我看到了这个选项连接 gt SSH gt 远程命令 但是如果我将初始化命令放在那里 启
  • TypeScript:将键值类型反向映射到值键

    给定一个类型的对象 type Key2Value foo bar voo doo 假设该类型的值始终是字符串类型 如何构造实用程序类型ReverseMap
  • gprof 的替代品 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 Locked 这个问题及其
  • Spring JMS 和 Oracle AQ

    有人让 Spring JMS 与 Oracle AQ 队列一起使用吗 我正在尝试根据这篇文章连接到 AQhttp blog nominet org uk tech 2007 10 04 spring jms with oracle aq 但
  • 使用 Angular JS 标签(例如 ng-view)从网络获取文本

    我正在尝试从网站获取所有可见文本 我使用 python scrapy 来完成这项工作 然而 我观察到 scrapy 仅适用于 HTML 标签 如 div body head 等 而不适用于 Ang view 等角度 js 标签 如果 ng
  • MongoDB 使用 Node.js 获取集合中的文档数量(计数)

    我目前正在编写一个函数 该函数应该返回集合中的文档数量 问题是当我返回值时它显示未定义 这是我的代码 var MongoClient require mongodb MongoClient open the connection the D
  • 您如何处理源代码管理中的配置文件?

    假设您有一个典型的 Web 应用程序和一个文件配置 无论如何 每个从事该项目的开发人员都会有一个适用于他们的开发盒的版本 其中会有开发版 产品版和阶段版 您如何在源代码控制中处理这个问题 根本不签入该文件 用不同的名称检查它还是干脆做一些奇
  • 将整数除以 2 时哪个选项更好?

    以下哪种技术是将整数除以 2 的最佳选择 为什么 技巧一 x x gt gt 1 技巧2 x x 2 Here x是一个整数 使用最能描述您要执行的操作的操作 如果将数字视为位序列 请使用位移位 如果将其视为数值 请使用除法 请注意 它们并
  • 我可以将多个 MySQL 行连接到一个字段中吗?

    Using MySQL 我可以做类似的事情 SELECT hobbies FROM peoples hobbies WHERE person id 5 我的输出 shopping fishing coding 但我只想要 1 行 1 列 预
  • Hadoop 和图像 3D 渲染

    我必须制作一个项目 3D 图像的分布式渲染 我可以使用标准算法 目的是学习hadoop而不是图像处理 那么有人可以建议我应该使用哪种语言 c 或 java 以及 3d 渲染器的一些标准实现吗 任何其他帮助都会非常有用 Hadoop 使用映射
  • 使用 WebpackExternals 进行酶单元测试

    我目前正在测试一个依赖于带有 webpack 外部脚本的组件 DBPanel js import React PureComponent from react import from jquery webpack 外部文件如下所示 webp
  • 如何检查 NSDictionary 或 NSMutableDictionary 是否包含键?

    我需要检查字典是否有密钥 如何 objectForKey如果键不存在则返回 nil
  • 在 R 中提取文件名的一部分

    我正在尝试编写一些代码来打开文件夹中的所有数据文件 应用一个函数 或一组函数 来提取我感兴趣的数据 到目前为止 一切都很好 问题是我想使用文件名的一个元素重新命名我从每个文件中提取的列之一 但我很难弄清楚如何提取它 我有一堆名为 YYYY
  • 如何在 RxJS observable 中添加额外的字段并等待它完成?

    我有一个返回的可观察值items 我只需要一个特定的项目 并且我想从也可观察到的 http 请求向其添加一些额外的字段 下面的代码是我试图实现这一目标的方法 但它不起作用 我需要完成所有可观察量才能获取完整的项目数据ngOnInit 我缺少
  • 如何在 pdf 中不显示页码 = 1 ? (html css)

    我的代码 html 像这样
  • MongoDB-Java 驱动程序:插入失败时捕获异常

    我正在做一个非常基本的插入 如下所示 try DB mongoDb mongo getDB databaseName DBCollection collection mongoDb getCollection collectionName
  • Postgres 中的存储过程是否在数据库事务中运行?

    如果存储过程在中间失败 那么从 SP 开头开始的更改是否会隐式回滚 或者我们是否必须编写任何显式代码来确保 SP 仅在数据库事务中运行 严格来说 Postgres 并没有have 存储过程如 ISO IEC 标准第 11 版之前的定义 该术