PostgreSQL. Ошибка pg_restore: [архиватор] неподдерживаемая версия в заголовке файла
by wa 13.12.2014 34467 просмотров
Случилась некая оказия при восстановлении бинарного дампа PostgreSQL.
$ pg_restore db.dump > db.sql
pg_restore: [архиватор] неподдерживаемая версия (1.12) в заголовке файла
Что же делать? Получилось так... Надо ковырять файл.
$ head db.dump
PGDMP
db9.0.139.0.13�� 0ENCODINENCODINGSET client_encoding = 'UTF8';
О, кажется версия PostgreSQL 9.0.13. Ищем в репозитории такую версию для своей ОС (в моём случае CentOS 6 x86_x64):
ftp://ftp.postgresql.org/pub/repos/yum/9.0/redhat/rhel-6-x86_64/postgresql90-9.0.13-1PGDG.rhel6.x86_64.rpm
Скачиваем, разархивируем rpm пакет.
$ rpm2cpio postgresql90-9.0.13-1PGDG.rhel6.x86_64.rpm | cpio -idmv
$ ls -la
итого 952
drwxr-xr-x 3 root root 4096 Дек 13 12:10 .
drwxrwxrwt 6 root root 4096 Дек 13 12:05 ..
-rw-r--r-- 1 root root 962040 Дек 13 11:49 postgresql90-9.0.13-1PGDG.rhel6.x86_64.rpm
drwxr-xr-x 4 root root 4096 Дек 13 12:10 usr
Нас интересует утилита pg_restore:
$ ls -la usr/pgsql-9.0/bin/pg_restore
-rwxr-xr-x 1 root root 118312 Апр 2 2013 usr/pgsql-9.0/bin/pg_restore
Ищем нашу рабочую версию pg_restore:
$ whereis pg_restore
pg_restore: /usr/bin/pg_restore
Переименовываем файл:
$ mv /usr/bin/pg_restore /usr/bin/pg_restore.back
Меняем на нашу версию утилиты:
$ cp usr/pgsql-9.0/bin/pg_restore /usr/bin/pg_restore
Конвертируем бинарный дамп в SQL-файл:
pg_restore db.dump > db.sql
Удаляем ненужную версию pg_restore и восстанавливаем оригинальный файл.
Послесловие. Данный способ не претендует на правильность исполнения, ничего не мешает поставить необходимую версию PostgreSQL. Вполне возможны ошибки синтаксиса SQL, т.к. между разными версиями добавляются новые фичи и возможности.
ADDED
У PostgreSQL есть замечательная wiki с полной информацией по установке разных версий вплоть до ссылок на репозиторий.
- Тэги:
- 2014
- PostgreSQL
- SQL
- centos