Как преобразовать двоичный файл 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, которые помогут вам определить установленные версии.