【问题标题】:Is it possible to read the header of an archived WAL segment?是否可以读取存档 WAL 段的标题?
【发布时间】:2019-09-13 07:47:45
【问题描述】:

我想阅读 PostgreSQL 归档的 WAL 段标头以获取有关文件内容的一些信息。相比之下,在 MS SQL 下我可以运行 restore headeronly ... 命令并获取有关每个备份文件的信息,包括事务日志备份文件。我会得到 firstLSN 和 lastLSN 以及很多其他有用的信息。

PostgreSQL 中是否有类似的可能性?

这是一个普遍的问题。

MS SQL 中类似可能性的示例:

restore headeronly from disk = 'E:\archived_logs\prd_tr_log_20190913100000-.bak';
go

带有FirstLSN、LastLSN等信息的结果集。

【问题讨论】:

  • 不是 SQL 命令,但也许你正在寻找pg_waldump
  • 谢谢。看起来很有趣。我真的不需要 SQL 命令,只是任何可能性。你知道吗,我在哪里可以找到一些如何使用该应用程序的示例?
  • 谢谢。我只是通过“尝试和错误”工作,而 pg_waldump 正是我所需要的。

标签: postgresql wal


【解决方案1】:

PostgreSQL 不会在标头中存储大量信息。来自源代码:

typedef struct XLogLongPageHeaderData
{
    XLogPageHeaderData std;     /* standard header fields */
    uint64      xlp_sysid;      /* system identifier from pg_control */
    uint32      xlp_seg_size;   /* just as a cross-check */
    uint32      xlp_xlog_blcksz;    /* just as a cross-check */
} XLogLongPageHeaderData;

因此 sysid 可用于确保 WAL 文件属于您认为它属于的系统(匹配 pg_control),但对最终用户没有任何意义。

您可能可以使用 pg_waldump 来获取第一个和最后一个 LSN(尽管文件本身或多或少暗示了这些 LSN,因此这是值得怀疑的),但您不能只从标题中获取这些,因为它们不在标题中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 2023-03-14
    相关资源
    最近更新 更多