有人可以告诉我 Postgres 15 是否使用隐式事务进行
UPDATE...RETURNING
查询吗?
例如,两个查询之间有什么区别吗
BEGIN;
UPDATE counter
SET value = value + 1
RETURNING value;
COMMIT;
和
UPDATE counter
SET value = value + 1
RETURNING value;
表格如下
CREATE TABLE IF NOT EXISTS counter
(
value bigint PRIMARY KEY NOT NULL DEFAULT 0,
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);
从文档(第57页),您可以阅读:
PostgreSQL 实际上将每条 SQL 语句都视为正在执行 在一笔交易内。如果您不发出 BEGIN 命令,则每个 单个语句具有隐式 BEGIN 和(如果成功)COMMIT 缠绕在它周围。由 BEGIN 和 包围的一组语句 COMMIT 有时也称为事务块
这意味着包括
UPDATE
在内的所有交易都将被视为交易,而无需显式指定它们。