【问题标题】:Postgres archive versionsPostgres 存档版本
【发布时间】:2020-05-28 04:56:42
【问题描述】:

尝试在本地导入每晚的生产备份,我遇到了这个问题:

pg_restore: [archiver] 文件头中不支持的版本 (1.14)

现在,至于在这种情况下该怎么办,the question has been asked beforesee here too

不过,我还有一些推论问题

  • 如何从命令行检查 Postgres 转储使用的存档格式的版本
  • 我如何知道哪些 Postgres 版本支持哪些版本的档案格式?

我发现 Postgres 版本和 Postgres 存档格式之间没有明显的联系,同时在 Google 或 Postgresql.org 中搜索“1.14”也没有帮助。

就我而言:

  • 虽然我仍然可以导入 Heroku Postgres 自身生成的转储,但夜间导出(由 Autobus 插件生成)会生成我无法在本地导入的存档版本。
  • 从 Postgres 9.6.14 升级到 9.6.16 没有帮助。 (我认为 Autobus 正在使用一些 Postgres 版本 > 9.6。)

我想通过查找最后 X 次转储的信息来了解他们何时更改存档格式……以及从那里我导入他们的转储的选项/要求是什么。

【问题讨论】:

    标签: postgresql postgresql-9.6


    【解决方案1】:

    pg_restore -l filename 将告诉您 PostgreSQL 转储的存档版本。

    要知道哪个 PostgreSQL 版本使用哪种存档格式,您必须查看源:pg_backup_archiver.h,例如:

    /* Historical version numbers (checked in code) */
    #define K_VERS_1_0  MAKE_ARCHIVE_VERSION(1, 0, 0)
    #define K_VERS_1_2  MAKE_ARCHIVE_VERSION(1, 2, 0)   /* Allow No ZLIB */
    #define K_VERS_1_3  MAKE_ARCHIVE_VERSION(1, 3, 0)   /* BLOBs */
    #define K_VERS_1_4  MAKE_ARCHIVE_VERSION(1, 4, 0)   /* Date & name in header */
    #define K_VERS_1_5  MAKE_ARCHIVE_VERSION(1, 5, 0)   /* Handle dependencies */
    #define K_VERS_1_6  MAKE_ARCHIVE_VERSION(1, 6, 0)   /* Schema field in TOCs */
    #define K_VERS_1_7  MAKE_ARCHIVE_VERSION(1, 7, 0)   /* File Offset size in
                                                         * header */
    #define K_VERS_1_8  MAKE_ARCHIVE_VERSION(1, 8, 0)   /* change interpretation
                                                         * of ID numbers and
                                                         * dependencies */
    #define K_VERS_1_9  MAKE_ARCHIVE_VERSION(1, 9, 0)   /* add default_with_oids
                                                         * tracking */
    #define K_VERS_1_10 MAKE_ARCHIVE_VERSION(1, 10, 0)  /* add tablespace */
    #define K_VERS_1_11 MAKE_ARCHIVE_VERSION(1, 11, 0)  /* add toc section
                                                         * indicator */
    #define K_VERS_1_12 MAKE_ARCHIVE_VERSION(1, 12, 0)  /* add separate BLOB
                                                         * entries */
    #define K_VERS_1_13 MAKE_ARCHIVE_VERSION(1, 13, 0)  /* change search_path
                                                         * behavior */
    #define K_VERS_1_14 MAKE_ARCHIVE_VERSION(1, 14, 0)  /* add tableam */
    

    我建议您使用最新版本的pg_restore:较新的版本可以读取较旧的存档格式。

    请注意,将使用旧版本 pg_dump 生成的转储恢复到新版本的数据库中不受很好的支持,并且可能会产生令人惊讶的结果。

    【讨论】:

      猜你喜欢
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 2017-11-10
      相关资源
      最近更新 更多