我正在经历link,有人提到PostgreSQL不支持撤消日志。因此,我想知道PostgreSQL如何在没有撤消日志的情况下回滚事务。
答案 0 :(得分:2)
在PostgreSQL中更新或删除行时,实际上不会 更新或删除行。旧的行版本仅保留在表中,并被某些事务标记为已删除。这使得更新就像删除旧行并插入新行版本一样。
回滚事务只不过是将事务标记为已中止。然后,旧行版本会自动再次变为当前行版本,而无需撤消任何操作。
该技术的致命弱点是,数据修改会产生“死行版本”,随后必须通过称为“真空”的后台程序来回收它。