如何在PostgreSQL数据库中实现rollback命令?
我想知道实现细节,以及在执行回滚时到底发生了什么,即数据库存储状态、写前日志(WAL)中的更改。
场景:我有一个名为employees的表,在数据库中磁盘大小为4GB。当我在这个表上打开一个事务以更新单个行,然后回滚更改时,数据库内部会发生什么?新版本的表是否会在磁盘上创建,但由于回滚而保持不活动状态?
发布于 2019-12-11 13:06:44
除了释放锁、删除文件等一些附带任务外,主要活动是将与提交日志中的事务对应的两个位(在pg_xact中)设置为“中止”,并将文件同步到磁盘。
回滚根本不触及表,而且应该总是快速的。新创建的行版本只是保留在表中(稍后将通过自动真空进行清理),它们只是变得不可见,因为创建它们的事务已被中止。类似于已删除的数据:事务删除行的标记就会变得无效。
https://dba.stackexchange.com/questions/255381
复制相似问题