postgresql - 如何在PostgreSQL中实现 `BEGIN ATOMIC`

标签 postgresql function transactions atomic postgresql-11

PostgreSQL 中的 Sybase BEGIN ATOMIC 等同于什么?

应该是这样的:

create or replace function my_func()
returns int
as $$ 
begin 
    begin atomic
        update stetment1;
        update stetment2;
        update stetment3;
    end;
end;
$$ LANGUAGE PLPGSQL;

三个更新语句必须一起成功或失败。

最佳答案

the three update statements must either succeed or fail all together as one..

问题下方的评论是一种误解。 每个 Postgres 函数都是事务性的,总是 要么作为一个整体成功,要么全部失败。相反,您只需要一个 PROCEDURE:提交在过程主体内已经完成的操作。

文字子句 BEGIN ATOMIC 用于新的标准 SQL CREATE FUNCTION 语法,它最终被 Postgres 14 添加。但它与任何其他 Postgres 函数一样“原子”。

无论哪种方式,您都可以使用新语法编写:

CREATE OR REPLACE FUNCTION my_func()
  LANGUAGE plpgsql
  RETURNS void  -- since you are not returning anything
BEGIN ATOMIC
   update stetment1;
   update stetment2;
   update stetment3:
END;

参见:

关于postgresql - 如何在PostgreSQL中实现 `BEGIN ATOMIC`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53394269/

相关文章:

python-3.x - 在 Windows 中安装 psycopg2 时出错

sql - 基于用户的数据访问

javascript - 使用多参数函数时无法获取对象数据

Java 使用 TransactionManager 实现两阶段提交

sql - 在 postgres 中打印运行时消息

node.js - 何时断开连接以及何时结束 pg 客户端或池

sql - 使用 ADO .NET 调用 SQL 函数

jQuery onload 屏幕大小和屏幕调整大小

java - 如何使用 entityManager 在 JPA 中启动事务

java - 独立 CDI + JTA(无 JNDI)