如何在 PostgreSQL 函数中使用 COMMIT 和 ROLLBACK

2023-12-28

我正在使用三个插入语句,如果第三个语句有错误,我想回滚第一个和第二个语句。如果没有办法做到这一点,请告诉我在 PostgresqQL 中处理此问题的不同方法。

如果我使用COMMIT or ROLLBACK,我收到错误。

CREATE OR REPLACE FUNCTION TEST1 ()
   RETURNS VOID
   LANGUAGE 'plpgsql'
   AS $$
BEGIN 

    INSERT INTO table1 VALUES (1);

    INSERT INTO table1 VALUES (2);

    INSERT INTO table1 VALUES ('A');
    COMMIT;
EXCEPTION
   WHEN OTHERS THEN
   ROLLBACK;
END;$$;

上面的代码不起作用;COMMIT and ROLLBACKPostgreSQL 函数不支持。


您不能使用事务语句,例如SAVEPOINT, COMMIT or ROLLBACK在一个函数中。文档 https://www.postgresql.org/docs/current/plpgsql-transactions.html says:

在调用的过程中CALL命令以及匿名代码块中(DO命令),可以使用命令结束事务COMMIT and ROLLBACK.

前否定,因为函数不是调用的过程CALL,你不能在函数中这样做。

The BEGINPL/pgSQL 中启动块与 SQL 语句不同BEGIN启动一个事务。

只需删除COMMIT从你的函数中,你就有了解决方案:由于整个函数总是在单个事务中运行,所以第三个语句中的任何错误都会导致ROLLBACK这也会撤销前两个语句。

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

如何在 PostgreSQL 函数中使用 COMMIT 和 ROLLBACK 的相关文章

随机推荐

  • 如何将离线 HTML5 Web 数据库与集中数据库同步

    我希望能够在 HTML5 iPad Web 应用程序中执行以下操作 将数据上传到在线数据库 如果我用 SQLite 之类的东西构建在线数据库 大小可能 将数据的子集或完整副本提取到离线网络数据库 超出3G网络覆盖范围 对下载的数据执行一系列
  • 超链接 HREF 不起作用

    我正在考虑一个新的网站想法 但是当我测试它时 A HREF 不起作用 它甚至没有显示手指 手指针 它是内容区域的文本 标题下的第一个白色块 但不是菜单 标题应该是帖子的链接 Wordpress 无效链接的屏幕截图 红色箭头 http new
  • 为什么此方法会导致代码分析错误 CA2000: Call Dispose()

    我正在使用 Microsoft Minimal Rules 代码分析集构建我的项目 它为我提供了关于此方法的 CA2000 private Timer InitializeTimer double intervalInSeconds Tim
  • 在 Git 中引用提交的子级

    如果您想移动HEAD到当前的父级HEAD 这很容易 git reset hard HEAD 但是有没有简单的方法可以执行与此操作完全相反的操作 即将头设置为当前头的第一个子提交 现在 我使用 gitk 作为解决方法 alt tab 向上箭头
  • Activeadmin 和 Formtastic:表单不响应:size

    我正在尝试格式化表单 文本字段响应某些方法 而不响应其他方法 我可以做这样的事情 f input name input html gt maxlength gt 10 f input name input html gt disabled
  • 神秘的底部边框

    我答应改变一个电子商务网站上的标志 虽然需要几分钟 但它花了很多小时 所以我希望有更多 CSS 经验的人可以帮助我 这是网站 http varuosad ee http varuosad ee 我似乎无法做到 tr 包含与图像 155px
  • Perl 6 分别捕获重复匹配组?

    我相信 Perl 6 提供了单独捕获重复组的能力 而不是早期的风格 您只能捕获最后一个组或整个匹配的组字符串 有人可以举一个很好的例子来说明如何使用 Perl 6 的这个很棒的功能吗 例如 我需要捕获此正则表达式的所有匹配组 and say
  • XPath:如何选择与同一级别的其他元素相关的元素

    问题很简单 但我对这种情况没有足够的练习 如何获得price如果我们知道我们只需要 块 中每个 div 的文本值商品促销元素 div class block div class item promo item div div class i
  • Python 上的 OpenCV 中的立体校准

    我是 OpenCV 新手 找不到 Python 上的 StereoCalibration 的正常教程 如果您有一些示例 请分享 I do single calibration for each of cameras and i have n
  • 如何针对特定活动禁用 Android 软键盘?

    我有一个包含一个 EditText 的活动 我只需要输入数字 现在 我已将 EditText 的输入类型定义为仅数字 并绘制了一个漂亮的键盘供用户使用 但是我还需要确保用户单击时不会弹出软键盘编辑文本 我尝试通过添加来通过清单隐藏键盘 an
  • 使用打开的终端 Windows 目录路径在 OSX(Snow Leopard) 中打开新的终端选项卡

    我已经在谷歌上搜索了一段时间 寻找一种简单的方法来做到这一点 但我找不到 我设置了一个自定义终端环境 zsh 其中包含各种别名和函数 以使事情变得更容易 我不断遇到的一件事是 我将快速 APPLE t 创建一个新选项卡 然后键入相对于我刚刚
  • Android - 设置应用程序的默认“打开支持的链接”选项

    如何控制默认值Open supported links到任一Ask every time or Open in this app对于我的 Android 应用程序 它发生在清单中吗 我有两个应用程序尝试接受相同的通用链接方案 理想的行为是让
  • 套接字上的 ClamAV clamd INSTREAM 出现间歇性问题

    我有一个运行 NodeJS 代码的 AWS Lambda 函数 用于将文件从 S3 流式传输到在 EC2 实例上运行的 ClamAV 一般来说 大约 75 的时间 系统可以正常工作 但经常 特别是当从不同的 Lambda 容器扫描多个文件时
  • Scala:谁能解释一下?

    考虑以下 Scala 代码 case class Data T value Option T def get T try doGet catch case e Exception gt throw new IllegalArgumentEx
  • Kotlin 中的按钮数组

    如何在 Kotlin 的 android studio 中创建按钮数组 我已经在 xml 文件中创建了带有 id 的按钮 现在我想在 Kotlin 代码中使用与数组元素相同的按钮 我尝试过这样的事情 var buttons Array
  • 有人在 R 中实现 Eureqa 接口吗?

    好吧 这个问题并不完全是技术性的 但非常相关且当前 如果您可能还没有听说过 Eureqa http creativemachines cornell edu eureqa 是一种基于机器学习 的工具 可帮助您找到数据中隐藏的方程和数学关系
  • Hibernate中的“删除哪里”级联删除?

    我正在尝试通过其外键之一级联删除连接表中的行 并且它有另一个与其相关的表 我也想删除与此 ID 关联的所有行 所以看起来如下图所示 当我将 Session delete reqCandObject 与 hibernate 一起使用时 它工作
  • 持久化自定义对象

    我有一个简单地继承自 NSObject 的自定义对象 它有 3 个成员 两个花车和一个NSDate 我的应用程序将有一个数组 其中包含许多这些对象 并且我需要在运行之间保留它 我怎样才能做到这一点 我考虑过使用 SQLite 数据库 但我认
  • 控制台和文件上的 Python 输出

    我正在编写一个代码来分析 PDF 文件 我想在控制台上显示输出 并在文件中保存输出的副本 我使用以下代码将输出保存在文件中 import sys sys stdout open C users Suleiman JK Desktop fil
  • 如何在 PostgreSQL 函数中使用 COMMIT 和 ROLLBACK

    我正在使用三个插入语句 如果第三个语句有错误 我想回滚第一个和第二个语句 如果没有办法做到这一点 请告诉我在 PostgresqQL 中处理此问题的不同方法 如果我使用COMMIT or ROLLBACK 我收到错误 CREATE OR R