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 中的存储过程是否在数据库事务中运行? 的相关文章

  • Java - 如何批量插入和更新数据库

    我想在一个PreparedStatement 中批量处理多种类型的数据库调用 这可能吗 有没有办法做类似的事情 PreparedStatement pstmt connection prepareStatement 哪里的 可以是INSER
  • 如何在MySQL数据库中插入数据?

    我有一个 ASP NET 应用程序和一个 MySQL 数据库 我想编写一个类来插入 删除和显示数据库中的数据 我有到数据库的连接 但无法在数据库中插入数据 我的班级插入方法 public string CreateEntry string
  • 长 IN 子句是代码异味吗?

    简单的问题 想知道长 IN 子句是否有代码味道 我真的不知道如何证明它的合理性 除了我认为的味道之外 我无法解释为什么它有味道 select name code capital population flower bird from us
  • 如何在 Postgres 中将表从公共模式移动到其他模式

    Postgres 9 1 数据库包含公共模式中的表 yksus1 ykssu9 pgAdmin 显示了这些定义 如下面的代码所示 如何将这些表移至 Firma1 架构 Firma1 模式中的其他表具有对这些表主键的外键引用 对这些表的外键引
  • 在 SQLAlchemy 中选择 NULL 值

    这是我的 PostgreSQL 表 test gt create table people name varchar primary key marriage status varchar test gt insert into peopl
  • 如何按照最初给出的时区存储和显示日期?

    我有一台服务器正在从不同时区的客户端提供数据 数据源包含人物 他们的出生日期和其他事件日期 出于我们的目的 如果我们可以将日期存储为给我们的日期 那就很方便了 例如 如果客户位于加利福尼亚州 并且告诉我们该人的出生日期是 5 月 31 日
  • 数据库设计 - 何时拆分表?

    有时创建一个单独的表会产生更多工作 我是否应该将其拆分 例如 在我的项目中 我有一张客户表 每个客户对每种产品都有自己的特殊价格 只有5种产品 未来不会计划更多产品 每个客户也有一周中公司向他交付产品的独特日子 当日期和产品价格是客户表中的
  • 每周汇总最近加入的记录

    我有一个updatesPostgres 中的表是 9 4 5 如下所示 goal id created at status 1 2016 01 01 green 1 2016 01 02 red 2 2016 01 02 amber And
  • 什么时候数据库被称为嵌入式数据库?

    术语 嵌入式数据库 与 数据库 具有不同的含义吗 我见过的嵌入式数据库有两种定义 嵌入式数据库就像专门为 嵌入式 空间 移动设备等 设计的数据库系统一样 这意味着它们在紧张的环境中 内存 CPU 方面 可以合理地执行 嵌入式数据库就像不需要
  • 在官方 Postgres docker 镜像中记录所有查询

    我有一个基于 Postgres 官方 docker 镜像的 docker 容器 当我使用查看 docker 容器的日志时 我想看到传入的查询docker logs f 这是我的 Dockerfile FROM postgres 11 1 a
  • psql:致命:角色“vagrant”不存在[重复]

    这个问题在这里已经有答案了 我创建了一个流浪实例 每次尝试时都会收到此错误psql在终端如何修复它 错误如下 psql 致命 角色 vagrant 不存在 我以为流浪汉会照顾这个 这是我的流浪文件 Vagrant require plugi
  • 如何更改 PostgreSQL 表中列的数据类型?

    在 PostgreSQL 交互式终端中输入以下命令会导致错误 ALTER TABLE tbl name ALTER COLUMN col name varchar 11 更改列的数据类型的正确命令是什么 请参阅此处的文档 http www
  • 关于pl/sql存储程序文本的问题

    我使用 TOAD 进行 PL SQL 开发 在 TOAD 中 当我输入过程名称并按 f4 时 我可以看到该过程的源代码 我认为 TOAD 从 v sqltext 视图获取源代码 为了证实我的想法 我写了一个查询 select from v
  • postgresql 数据库在 OS X 上的位置?

    我确信这个问题已经得到解答 但我似乎找不到答案 我使用 Homebrew brew install postgresql 安装了 postgresql 它安装到 usr local Cellar postgresql 后记按照我这样做的说明
  • java 没有捕获 ms sql 存储过程引发错误

    我的 SQL Server 2008 数据库中有一个存储过程 并且正在开发一个使用 sqljdbc4 连接的 java 应用程序 一切都工作正常 甚至是过程调用 但有一件事 在某些情况下 java 不会捕获过程抛出的引发的异常 并在存在像
  • 为什么我的 SQL 占位符没有被替换(使用 Go pq)?

    根据文档 我正在这样做 var thingname string asdf var id int err database QueryRow SELECT id from things where thing thingname Scan
  • 环回:原子读取和更新

    有没有办法在环回中实现类似的东西 LOCK READ INCREMENT UNLOCK 我想将计数器保留为数据库值 每个键都是一个计数器 或一个设置 并且它们不应该同时访问我的多个请求 此外 这也应该适用于本地请求 无 RemoteHook
  • Hibernate 乐观锁..它是如何工作的?

    我正在阅读下面关于休眠乐观锁定的博客 我打算将它与休眠一起使用 但是 我有一个担忧 我们有java代码和c 代码 都连接到一个数据库 虽然java代码可以使用hibernate来实现乐观锁定 但我想让c 代码做同样的事情 此外 C 代码正在
  • 如何在 PostgreSql 的预订表中找到第一个空闲时间

    预订表包含预订开始日期 开始时间和持续时间 工作日的开始时间为工作时间 8 00 18 00 以半小时为增量 持续时间也以每天半小时为增量 CREATE TABLE reservation startdate date not null s
  • 如何调试 MySQL 存储过程?

    我当前的调试存储过程的过程非常简单 我创建一个名为 debug 的表 在存储过程运行时从其中插入变量值 这允许我查看脚本中给定点的任何变量的值 但是有没有更好的方法来调试 MySQL 存储过程 下列debug msg可以调用过程来简单地将调

随机推荐

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

    我一直在尝试编写一些函数来根据谷歌电子表格上多个单元格的信息创建谷歌日历和谷歌日历事件 发布的第一期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 版之前的定义 该术