web-dev-qa-db-ja.com

リモートサーバーからのpg_dump postgresデータベース

DMZのリモートサーバー上のSQLデータベースをpg_dumpしようとしています。 2つの問題があります。

1)リモートサーバーに十分なスペースが残っていないため、データベースのローカルバックアップを実行する通常のコマンドpg_dump -C database > sqldatabase.sql.bakはスペースの問題のため機能しません。

2)他のバージョンのpg_dumpコマンドを実行して、リモートサーバーからローカルサーバーにデータベースをダンプすることもできません:

pg_dump -C -h remotehost -U remoteuser db_name | psql localhost -U localuser db_name

サーバーがDMZにあり、ポート5432がブロックされているため。私が見たいのは、データベースをpg_dumpして、リモートサーバーにファイルとして(sshまたは他の形式で)すぐに保存できるかどうかです。私が試していたのは:pg_dump -C testdb | ssh [email protected] | > /home/admin/testdb.sql.bak

私が達成しようとしていることが可能かどうかは誰にもわかりますか?

44

Sshでリモートサーバーに接続し、pg_dump呼び出しを接続して、出力をローカルマシンのstdoutに送り返すことができます。

ssh user@remote_machine "pg_dump -U dbuser -h localhost -C --column-inserts" \
 >> backup_file_on_your_local_machine.sql

編集:タイプミスを修正。

67
OkieOth

pg_dumpを使用して、リモートのpostgresqlデータベースからバックアップを作成しましょう。

pg_dump -h [Host address] -Fc -o -U [database user] <database name> > [dump file]

後で同じリモートサーバーで以下を使用して復元できます。

Sudo -u postgres pg_restore -C mydb_backup.dump

例:

pg_dump -h 67.8.78.10 -Fc -o -U myuser mydb > mydb_backup.dump

完全(すべてのデータベースとオブジェクト)

pg_dumpall -U myuser -h 67.8.78.10 --clean --file=mydb_backup.dump

pg_dumpall --cleanからの復元:

psql -f mydb_backup.dump postgres #it doesn't matter which db you select here

コピー元: https://codepad.co/snippet/73eKCuLx

10
Kishore Relangi

次のように、テーブルの一部をローカルマシンのファイルにダンプしてみることができます(ローカルマシンにpsqlがインストールされていると仮定します):

psql -h ${db_Host} -p 5432 -U ${db_user} -d ${db_name} \
-c "\copy (SELECT * FROM my_table LIMIT 10000) to 'some_local_file.csv' csv;"

また、エクスポートされたcsvを後でこのように別のdbにインポートできます。

COPY my_table FROM '/path/to/some_local_file.csv' WITH (FORMAT csv);
4
nybon

1つの可能な解決策-sshを介したパイプ-が言及されています。

DBサーバーにパブリックinetアドレスをリッスンさせ、pg_hba.confにバックアップマシンのhostsslエントリを追加し、セキュリティのためにクライアント証明書を設定し、pg_dump -h dbserver.example.com ...を使用してクライアント/バックアップマシンでダンプを実行することもできます。

これは、無人バックアップの方が簡単です。

接続の構成(sslmode)については、 サポートされている環境変数 も参照してください。

2
Str.