データベースダンプ内のデータを検索したいのですが、これらのダンプはバイナリ圧縮形式(PGDMP
ヘッダー)を使用しています。
これらを復元せずにSQLに変換するにはどうすればよいですか?
pg_restore
は、データベース名なしで実行すると、テキストダンプをstdoutに出力します。 -f
またはI/Oリダイレクトを使用して他の場所に送信できます。
pg_restore -f mydatabase.sql mydatabase.dump
私が使用した最速の方法は次のとおりです。
pg_restore mybinaryfile.backup > mysqlfile.sql
Pg_restoreは標準出力に吐き出すだけなので、特別なフラグはありません。
複数のクラスターを実行する場合、復元コマンドはデフォルトのバージョンを気に入らない可能性があることに注意してください...
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に対しても同様のコマンドがあります。