我正在 PostgreSQL 13 上练习时间点恢复 (PITR),以防止意外删除数据。由于 PostgreSQL 提供了多个参数来执行 PITR,因此我在事务 XID 和 LSN 之间进行选择时有点困惑。
如果一个意外的DELETE
语句删除了大量的行,并且我从 WAL 转储中获得相应的XID
数据LSN
,那么无论我使用 XID 还是 LSN,执行 PITR 是否会产生相同的结果?
如果我使用 XID 恢复,是否存在丢失其他已提交事务的风险?
我正在 PostgreSQL 13 上练习时间点恢复 (PITR),以防止意外删除数据。由于 PostgreSQL 提供了多个参数来执行 PITR,因此我在事务 XID 和 LSN 之间进行选择时有点困惑。
如果一个意外的DELETE
语句删除了大量的行,并且我从 WAL 转储中获得相应的XID
数据LSN
,那么无论我使用 XID 还是 LSN,执行 PITR 是否会产生相同的结果?
如果我使用 XID 恢复,是否存在丢失其他已提交事务的风险?
结果可能会有所不同。
语句将写入许多 WAL 记录,从对表执行的锁定的记录
DROP TABLE
开始。如果恢复到该 LSN,则该时间点将比恢复到事务 ID(即该事务的记录)的时间点更早。差异不会影响本身(如果,则永远不会恢复),但它会影响在起始 LSN 和 的提交之间提交的并发事务。LOCK
ACCESS EXCLUSIVE
COMMIT
DROP TABLE
recovery_target_inclusive
off
DROP TABLE