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

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

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

3 ответа

Решение

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

pg_restore -f mydatabase.sql mydatabase.dump 

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

pg_restore mybinaryfile.backup > mysqlfile.sql

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

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

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

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

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

dpkg -l '*postgres*'

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

Другие вопросы по тегам