Hubert 'depesz' Lubaczewski:在给定的WAL LSN范围内哪些表被修改?

💡 原文英文,约1900词,阅读约需7分钟。
📝

内容提要

数据库故障转移导致CDC工具未能解码并发送给Debezium的WAL数据。需要查看WAL流中是否有未被看到的表被修改,并获取其ID/位置。数据量约为3kB。获取WAL文件名称可用于进一步处理。

🎯

关键要点

  • 数据库故障转移导致CDC工具未能解码WAL数据。
  • 需要查看WAL流中未被Debezium看到的表及其ID/位置。
  • 数据量约为3kB,获取WAL文件名称用于进一步处理。
  • 通过查询获取WAL文件名称,确认所有需要的WAL在同一个文件中。
  • 如果起始LSN不同,需要获取更多WAL文件。
  • WAL文件可能在pg_wal目录中,也可能需要从WAL归档中恢复。
  • 使用pg_waldump程序查看WAL内容,重点关注Heap/Heap2行。
  • 根据描述判断修改操作类型,如DELETE、INSERT、UPDATE等。
  • 通过OID查询获取被修改表的名称。
  • 如果表在LSN范围内被重写,可能会导致查找变得复杂。

延伸问答

数据库故障转移后,如何确认哪些表被修改?

可以通过查询WAL流中未被Debezium看到的表及其ID/位置来确认被修改的表。

如何获取WAL文件的名称?

可以使用查询 `SELECT pg_walfile_name('起始LSN')` 和 `SELECT pg_walfile_name('结束LSN')` 来获取WAL文件的名称。

WAL文件可能存放在哪里?

WAL文件可能在pg_wal目录中,也可能需要从WAL归档中恢复。

如何使用pg_waldump查看WAL内容?

可以使用命令 `pg_waldump --start=起始LSN --end=结束LSN WAL文件名` 来查看指定范围内的WAL内容。

如何判断WAL记录的修改操作类型?

可以通过查看WAL记录中的描述字段,识别操作类型,如DELETE、INSERT、UPDATE等。

如果表在LSN范围内被重写,会有什么影响?

如果表在LSN范围内被重写,可能会导致查找变得复杂,因为其relfilenode会改变。

➡️

继续阅读