我想阅读PostgreSQL存档的WAL段头,以获取文件内容的一些信息。相比之下,在MS SQL下我可以运行
arestore headeronly ...命令并获取有关每个备份文件的信息,包括事务日志备份文件。我会得到第一个LSN和最后一个LSN以及很多其他有用的信息。
在PostgreSQL中有类似的可能性吗?
这是一个一般性的问题。
MS SQL中类似可能性的示例:

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

包含FirstLSN、LastLSN和其他信息的结果集。

最佳答案

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_控件),但没有其他对最终用户有意义的东西。
您可能可以使用pg_waldump来获取第一个和最后一个LSN(尽管这些LSN或多或少是由文件本身的名称暗示的,所以这是一个可疑的值),但是您不能只从头获取这些LSN,因为它们不在头中。

10-01 04:51