Postgres архивные версии - PullRequest
1 голос
/ 12 февраля 2020

Пытаясь локально импортировать ночную резервную копию, я наткнулся на следующее:

pg_restore: [архиватор] неподдерживаемая версия (1.14) в заголовке файла

Теперь, что делать в таком случае, вопрос был задан ранее или см. здесь также .

У меня все еще остается некоторое следствие вопросы хотя:

  • Как я могу проверить, какую версию формата архива a Postgres dump использует из командной строки?
  • Как мне узнать, какие версии Postgres поддерживают какие версии формата архивов?

Между тем, я не вижу очевидной связи между Postgres версиями и Postgres форматами архивов поиск в Google или Postgresql .org по "1.14" не помог.

В моем случае:

  • Хотя я все еще могу импортировать дампы, созданные самим Heroku Postgres, Ночной экспорт (производится с помощью надстройки Autobus) создает архивные версии, которые я не могу импортировать локально.
  • Обновление с Postgres 9.6.14 до 9.6.16 не помогло. (Полагаю, Autobus использует какую-то Postgres версию> 9.6.)

Я бы хотел знать, когда они меняли форматы архивов, просматривая информацию о последних X-дампах ... и оттуда какие у меня параметры / требования для импорта их дампов.

1 Ответ

1 голос
/ 12 февраля 2020

pg_restore -l filename сообщит вам версию архива PostgreSQL dump.

Чтобы узнать, какая версия 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 в более новую версию базы данных плохо поддерживаются и могут привести к неожиданным результатам.

...