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/