Как преобразовать двоичный pgdump (сжатый) в простой файл SQL?

Я хочу искать некоторые данные внутри дампа базы данных, но эти дампы используют двоично сжатый формат (PGDMP header).

Как я могу преобразовать их в SQL без их восстановления?

Ответы

Ответ 1

pg_restore, при запуске без имени базы данных выводится текстовый дамп в stdout; вы можете отправить это в другом месте с помощью -f или с перенаправлением ввода/вывода.

pg_restore -f mydatabase.sql mydatabase.dump 

Ответ 2

Самый быстрый метод, который я использовал:

pg_restore mybinaryfile.backup > mysqlfile.sql

Нет специальных флагов, так как pg_restore просто выплевывает его в стандартный вывод.

Ответ 3

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

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

В этом случае вы должны указать версию, хост и порт как:

pg_restore --cluster 9.1/localhost:5433 -f db.sql db.pgsql

(обратите внимание, что информация host:port игнорируется с параметром -f.)

Порт (5433) можно определить с помощью команды pgsql, как в:

pgsql --port 5433 template1

Когда pgsql соединяется, он пишет комментарий, например:

psql (9.3.6, сервер 9.1.13)

Это означает, что вы используете pgsql 9.3.6, а этот порт 5433 ссылается на сервер 9.1.13.

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

sudo netstat -a64np | grep LISTEN | grep postgres

Для параметра -p, который печатает имя процесса, требуется sudo. Это дает вам список портов (обычно TCP и UDP-портов).

Наконец, в системе Debian/Ubuntu вы можете получить список установленных кластеров с помощью команды dpkg -l, как в:

dpkg -l '*postgres*'

В настоящий момент установлен список записей, начинающихся с "ii" (слева от большинства столбцов). У вас, конечно же, есть аналогичные команды для других Unices, которые помогут вам определить установленные версии.