【PGCCC】PostgreSQL 保存点

这篇文章将介绍事务中 PostgreSQL 保存点的基础知识。
在这里插入图片描述

事务用于形成一个不可分离的工作单元,以作为一个单元来提交或不提交。使用关键字打开事务,然后提交或回滚。不带任何参数即可执行此操作。BEGINROLLBACK
分割交易
在事务的概念中,有一个较小的单元允许增量持久性,范围限定为事务,称为“保存点”。保存点创建具有与事务相似属性的子事务。
保存点
保存点将事务的特定状态标记为可恢复位置。以类似于回滚整个事务的方式,捕获事务中的一个位置,数据的状态可以恢复到该位置ROLLBACKROLLBACK TO

恢复到保存点后,查询数据将显示其在创建保存点时的状态。
命令
保存点具有需要了解的动词:

  • “Savepoint”可以用作名词或动词,具体取决于上下文。运行命令,其中 a
    是保存点的名称,使用“savepoint”作为创建保存点“a”的命令动词。保存点“a”(名词)已创建。SAVEPOINT a
  • 保存点名称可以重复使用,从而创建具有相同名称的新保存点,从而反映数据的新状态。
  • 可以使用命令将保存点回滚到指定命名的保存点
    https://www.postgresql.org/docs/current/sql-rollback-to.html
    ROLLBACKTO
  • 可以使用该命令“释放”保存点。但是,释放保存点不会更改数据的状态,而这可能会这样做。释放保存点会释放保存点名称,并释放用于创建同一点的资源。阅读更多:https://www.postgresql.org/docs/current/sql-release-savepoint.html RELEASEROLLBACKTO

让我们看一下用于创建和回滚到保存点的 SQL 命令:

BEGIN;

INSERT INTO vehicles (name) VALUES ('Toyota bZ4X');
SAVEPOINT a;

INSERT INTO vehicles (name) VALUES ('Honda Prologue');
SELECT COUNT(*) FROM vehicles; -- 2

ROLLBACK TO a; -- SELECT COUNT(*) FROM VEHICLES; -- is 1

COMMIT; -- Only one vehicle was saved

可以使用该命令删除保存点。RELEASE

下面是创建和释放保存点的示例:

BEGIN;

INSERT INTO vehicles (name) VALUES ('Toyota bZ4X');

SAVEPOINT a;

RELEASE a;

COMMIT; -- Only one vehicle was saved

在上面的示例中,创建了一个保存点,然后释放了一个保存点,不会影响数据的状态。
重用保存点
保存点名称可以重复使用。这些文档描述了 SQL 标准如何规定在替换时必须删除具有相同名称的保存点。

这是 Postgres 不完全符合 SQL 标准的地方,因为它说在 PostgreSQL 中保存点是保留的。

创建保存点时,事务中的数据状态将在创建时“就在”保存。这可以通过使用命令恢复到保存点来恢复。ROLLBACK TO

当回滚到保存点时,稍后在事务中创建的保存点不再是“已知的”。
错误
当使用同一名称创建多个保存点时(例如三次),也可以根据保存点的数量释放每个保存点的次数。

想象一下,有三个是用名称“a”创建的。在这种情况下,可以对“a”调用三次 release,但在第四次时将产生错误。

当这种错误发生时,外部事务现在也处于错误状态。从那里,外部事务可以回滚。在这种错误状态下,调用也会回滚事务。COMMIT

BEGIN;

SAVEPOINT a;
SAVEPOINT a;
SAVEPOINT a;

RELEASE a;
RELEASE a;
RELEASE a;
RELEASE a; -- ERROR:  savepoint "a" does not exist

这是对事务内部保存点的简要介绍。请记住,保存点是一种机制,用于在事务中为事务级数据的状态创建“可恢复位置”。
#PG培训#PG考试#postgresql培训#postgresql考试#postgresql认证

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值