postgres 函数和 BEGIN 事务

2023-12-24

我对 postgres 的功能和事务如何工作有一些疑问。

目前我的函数如下所示:

CREATE OR REPLACE FUNCTION test_function(some_id character varying)
    RETURNS character varying AS
$BODY$
BEGIN
    S1;
    S2;
    S3;
    .
    .
    Sn;
RETURN some_id;
END; $BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

语句可以是INSERT, UPDATE或普通SELECT查询基于some_id。据我从 postgre 了解到文档 https://www.postgresql.org/docs/9.5/static/sql-begin.html,此函数中的所有语句都作为单个事务执行并在 END 时提交。

我的问题是:

  1. 如果可以说S1是成功的但是S2失败,将S1承诺吗?
  2. 我的理解是,之后的所有陈述BEGIN作为单个事务执行,对吗?
  3. 在没有明确说明的情况下COMMIT before END并且所有语句都成功,无论 autocommit = on/off 是否都会提交事务?
  4. 可以说S1, S2, S3都是INSERT声明。S1 and S2成功但是S3失败,将插入S1, S2在没有明确说明的情况下可以逆转ROLLBACK陈述?

谢谢你!


按编号回答:

  1. No; if S2失败,整个事务被中止,只能回滚。

  2. 很可能存在误会。 SQL语句BEGIN启动交易与启动交易完全不同BEGIN启动 PL/pgSQL 块。后者确实not开始交易。

    如果没有明确的 SQL 命令BEGIN,每个语句都在自己的事务中运行(“自动提交”)。

    函数中的所有语句都在单个事务中执行。

  3. 你不能有COMMIT (or ROLLBACK)在一个函数中。

  4. 是的。这与1. 是同一个问题,只是是否定的。

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

postgres 函数和 BEGIN 事务 的相关文章

随机推荐

  • 在 ASP.NET 中转换/访问 QueryString 值

    我很好奇每个人在 ASP NET 中处理 抽象 QueryString 时都做了什么 在我们的一些网络应用程序中 我在网站上看到了很多这样的内容 int val 0 if Request QueryString someKey null v
  • IllegalStateException:存储实体 时发生错误 实体副本 已分配给不同的实体

    经过大量谷歌搜索后 除了降级休眠版本之外 我没有找到问题的答案 但我在 2003 年类似的帖子中遇到了这种情况 问题是什么 in the first session I do session1 save entity session1 ge
  • OAuth 2 与 spring security 并在重定向中设置 State 参数

    我将 Spring boot 与 Spring security 结合使用 并通过 OAuth 2 身份验证调用 CIAM 服务器的自定义 Filter 类 我想显式设置或覆盖默认设置 以便可以在 Spring Security 在后台准备
  • Yocto - 根据图像类型选择正确的配置文件

    在我相当标准的 Yocto 构建中 我有openssh包括 它的配置文件 etc ssh sshd config 对于生产和开发映像自然应该是不同的 例如 希望在开发映像上进行 root 登录 而不是在生产映像上登录 生产和开发映像是不同的
  • EventEmitter.call() 的作用是什么?

    我看到了这个代码示例 function Dog name this name name EventEmitter call this 它 继承 自 EventEmitter 但是 call 方法实际上做了什么 基本上 Dog据说是一个具有属
  • Django .aggregate() 上的 .annotate()

    是否可以聚合查询集的注释 Models class Article models Model title models CharField max length 255 body models TextField class State m
  • AsEnumerable() 是否缓存所有结果 (LINQ)

    当我们对序列调用查询运算符时 会调用特定于序列的运算符 我的意思是如果我打电话Where lt gt 操作符开启IEnumerable lt gt 将被调用的运算符将在 Enumerable 类中定义 并且如果它被调用IQueryable
  • 如何使用 Docker 使用 Redis 配置 Spring Boot Web 应用程序

    我有一个小型 Spring Boot Web 应用程序 它将数据保存到 Redis 运行 docker compose yml 后 容器已启动 但已开启localhost 8085我有 连接已重置 Spring Boot应用程序 yml s
  • Firebase Firestore 文档更改历史记录(例如每个文档中的活动日志/更改历史记录)

    我正在尝试为我的文档创建一个活动日志系统或历史记录 因此每次修改文档中的字段时 我都想记录或保存它 以便我可以在每个文档上进行更改后查看历史记录 我怎样才能做到这一点 我不想保存每次更改的完整文档 然后有大量重复的文档 如果可能的话 我只想
  • 如何实例化不可变的相互递归对象?

    我有一个不可变的递归类型 public sealed class Foo private readonly object something private readonly Foo other might be null public F
  • 不同高度的内联块的对齐问题[重复]

    这个问题在这里已经有答案了 我试图让此处所示的块彼此对齐 但如果它们的高度不同 由于某种原因 较短的 div 会与容器 div 的底部对齐 这两个 div 都没有任何会导致此行为的填充或边距 我需要做什么才能让它们与 div 顶部对齐 ve
  • NSMutableArray 对象的总大小

    我有一个NSMutableArray包含一堆对象 我想弄清楚的是有多少内存array使用 在查看了几个地方之后 我知道了调用的大小 当我调用它时 我得到了 32 位 这是调用的大小 NSMutableArray自己反对 示例代码 NSMut
  • 如何在 Angular 单元测试中模拟窗口滚动?

    如何在 Jasmine 单元测试中模拟或模拟窗口滚动和 或设置 window pageYOffset 属性 我正在使用 Angular 1 3 Jasmine 2 1 Karma 0 12 28 和 PhantomJS 1 9 12 这是我
  • 何时在 SAS 中使用 IF 或 %IF

    我是 SAS 新手 很难弄清楚何时应使用简单的 If Then else 以及何时应使用 IF THEN ELSE 作为示例代码如下 let inFile scan sysparm 1 macro read data infile data
  • 如何为 Celery 任务实现自动重试

    在芹菜中 你可以retry任何任务 以防出现异常 你可以这样做 task max retries 5 def div a b try return a b except ZeroDivisionError exc raise div ret
  • 反序列化时BinaryFormatter和CryptoStream问题

    我在这里有点绝望了 我正在尝试将带有序列化对象的加密文件写入磁盘 然后检索该文件 解密该文件并将对象反序列化回来 更新 我将代码重构为 using Stream innerStream File Create this GetFullFil
  • 使用 ajax 无限滚动不适用于 Chrome

    好的 在对这个网站进行了大量研究之后 我编写了执行无限滚动的代码 JS window scroll function if window scrollTop window height document height alert This
  • 找不到 CatalogManager.properties

    我的 servlet 应用程序使用 XML 目录 首先我用的是org apache xml resolver tools CatalogResolver 它找到它的配置文件CatalogManager properties under WE
  • NSInMemoryStoreType 与 NSBatchDeleteRequest 不兼容吗?

    我目前正在对与核心数据交互的层进行单元测试 它保存 删除和更新Item目的 然而 我的测试试图保存一些Item然后执行批量删除一直失败 This is Item extension Item MARK Properties NSManage
  • postgres 函数和 BEGIN 事务

    我对 postgres 的功能和事务如何工作有一些疑问 目前我的函数如下所示 CREATE OR REPLACE FUNCTION test function some id character varying RETURNS charac