PostgreSQL中的BEGIN ATOMIC
* 的等价物是什么?
它应该是这样的:
CREATE OR REPLACE FUNCTION my_func()
RETURNS int
AS $$
BEGIN
BEGIN ATOMIC
UPDATE stetment1;
UPDATE stetment2;
UPDATE stetment3;
END;
END;
$$ LANGUAGE plpgsql;
字符串
这三个update语句必须一起成功或失败。
2条答案
按热度按时间oxf4rvwz1#
这三个更新语句必须一起成功或失败。
问题下面的注解是一个误解。* 每个 * Postgres函数都是事务性的,并且 * 总是 * 要么成功,要么失败。你只需要一个
PROCEDURE
来实现相反的目的:提交一个过程体内已经完成的事情。文字子句
BEGIN ATOMIC
用于新的标准SQLCREATE FUNCTION
语法,它最终被添加到Postgres 14中。但它和其他Postgres函数一样是“原子”的。无论哪种方式,使用新的语法,您可以编写:
字符串
请参阅:
lyr7nygr2#
您可以在PostgreSQL中使用BEGIN ATOMIC; ... END; statement,如下所示。*
BEGIN ATOMIC; ... END;
语句仅适用于LANGUAGE SQL
根据the doc,我的答案给出了一些BEGIN ATOMIC; ... END;
语句的例子:字符串
实际上,不使用下面的
BEGIN ATOMIC; ... END;
语句和上面的一样,因为在PostgreSQL中,BEGIN ATOMIC; ... END;
语句没有什么特别的,它只是一个语法,实际上在PostgreSQL中,一个函数会在一个事务中自动运行,如果有错误,就会回滚:型