web-dev-qa-db-ja.com

バイナリpgdump(圧縮)をプレーンなSQLファイルに変換するにはどうすればよいですか?

データベースダンプ内のデータを検索したいのですが、これらのダンプはバイナリ圧縮形式(PGDMPヘッダー)を使用しています。

これらを復元せずにSQLに変換するにはどうすればよいですか?

35
sorin

pg_restoreは、データベース名なしで実行すると、テキストダンプをstdoutに出力します。 -fまたはI/Oリダイレクトを使用して他の場所に送信できます。

pg_restore -f mydatabase.sql mydatabase.dump 
60
Craig Ringer

私が使用した最速の方法は次のとおりです。

pg_restore mybinaryfile.backup > mysqlfile.sql

Pg_restoreは標準出力に吐き出すだけなので、特別なフラグはありません。

12
knownasilya

複数のクラスターを実行する場合、復元コマンドはデフォルトのバージョンを気に入らない可能性があることに注意してください...

pg_restore:[archiver]ファイルヘッダーのサポートされていないバージョン(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に対しても同様のコマンドがあります。

0
Alexis Wilke