回答:
中間ファイルを作成する必要はありません。できるよ
pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname
または
pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname
使用psql
またはpg_dump
リモートホストに接続します。
大規模なデータベースまたは低速な接続では、ファイルのダンプと圧縮されたファイルの転送が高速になる場合があります。
Kornelが中間ファイルにダンプする必要はないと言ったように、圧縮して作業したい場合は圧縮トンネルを使用できます
pg_dump -C dbname | bzip2 | ssh remoteuser@remotehost "bunzip2 | psql dbname"
または
pg_dump -C dbname | ssh -C remoteuser@remotehost "psql dbname"
ただし、このソリューションでは、両端でセッションを取得する必要もあります。
注: pg_dump
はバックアップpsql
用であり、復元用です。したがって、この回答の最初のコマンドはローカルからリモートにコピーすることであり、2番目のコマンドはリモートからローカルにコピーすることです。詳細-> https://www.postgresql.org/docs/9.6/app-pgdump.html
ssh remoteuser@remotehost "pg_dump -C dbname | bzip2" | bunzip2 | psql dbname
?
pg_dump the_db_name > the_backup.sql
次に、バックアップを開発サーバーにコピーし、次のコマンドで復元します。
psql the_new_dev_db < the_backup.sql
使用pg_dumpは、以降のpsqlまたはpg_restoreの -あなたがのpg_dumpに-Fpまたは-Fcオプションを選択するかどうかによって異なります。
使用例:
ssh production
pg_dump -C -Fp -f dump.sql -U postgres some_database_name
scp dump.sql development:
rm dump.sql
ssh development
psql -U postgres -f dump.sql
バージョン間での移行を検討している場合(たとえば、postgresを更新し、9.1をlocalhost:5432で実行し、9.3をlocalhost:5434で実行している場合)、次のコマンドを実行できます。
pg_dumpall -p 5432 -U myuser91 | psql -U myuser94 -d postgres -p 5434
移行ドキュメントを確認してください。
pg_basebackup
特に大規模なデータベースの場合、これを行うには今より良い方法のようです。
同じまたは古いメジャーバージョンのサーバーからデータベースをコピーできます。あるいはより正確には:
pg_basebackup
9.1までの同じまたは古いメジャーバージョンのサーバーで動作します。ただし、WALストリーミングモード(-X stream
)はサーバーバージョン9.3以降で--format=tar
のみ動作し、現在のバージョンのtar形式モード()はサーバーバージョン9.5以降でのみ動作します。
そのためには、ソースサーバーで必要です:
listen_addresses = '*'
ターゲットサーバーから接続できるようにします。そのためにポート5432が開いていることを確認してください。max_wal_senders = 1
(-X fetch
)2
のための-X stream
(PostgreSQLの12の場合のデフォルト)、またはそれ以上。wal_level = replica
設定できるようにまたはそれ以上max_wal_senders > 0
。host replication postgres DST_IP/32 trust
の中でpg_hba.conf
。これによりpg
、DST_IP
マシンからのすべてのユーザーにクラスターへのアクセスが許可されます。より安全なオプションを使用することをお勧めします。変更1、2、3はサーバーの再起動が必要で、変更4はリロードが必要です。
ターゲットサーバー:
# systemctl stop postgresql@VERSION-NAME
postgres$ pg_basebackup -h SRC_IP -U postgres -D VERSION/NAME --progress
# systemctl start postgresql@VERSION-NAME
バックアップするデータベース名を指定してこのコマンドを実行し、DBのダンプを取得します。
pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}
eg. pg_dump -U postgres mydbname -f mydbnamedump.sql
次に、このダンプファイルを、DBをコピーするリモートマシンにscpします。
eg. scp mydbnamedump.sql user01@remotemachineip:~/some/folder/
リモートマシンでは、〜/ some / folderで次のコマンドを実行して、DBを復元します。
psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql}
eg. psql -U postgres -d mynewdb -f mydbnamedump.sql
私はかなり苦労しましたが、最終的にRails 4で動作させるための方法は次のとおりです。
古いサーバー
sudo su - postgres
pg_dump -c --inserts old_db_name > dump.sql
ダンプを作成するには、postgres linuxユーザーを使用する必要がありました。また、新しいサーバーにデータベースを強制的に作成するには、-cを使用する必要がありました。--insertsは、INSERT()構文を使用するように指示します。
次に、新しいサーバーでsimpy:
sudo su - postgres
psql new_database_name < dump.sql
サーバー間でdump.sqlファイルを転送するには、「cat」を使用してコンテンツを印刷するだけでなく、「nano」を使用してコンテンツをコピー貼り付けして再作成しました。
また、2つのデータベースで使用していたROLEは異なっていたため、ダンプ内のすべての所有者名を検索して置換する必要がありました。
Linuxシェルスクリプトを共有して、テーブルデータをあるサーバーから別のPostgreSQLサーバーにコピーします。
PostgreSQLサーバー間のデータ移行のためのLinux Bash Shell Script:
#!/bin/bash
psql \
-X \
-U user_name \
-h host_name1 \
-d database_name \
-c "\\copy tbl_Students to stdout" \
| \
psql \
-X \
-U user_name \
-h host_name2 \
-d database_name \
-c "\\copy tbl_Students from stdin"
データを移行しています。宛先/ 2番目のデータベースサーバーに空のテーブルを作成してください。
これはユーティリティスクリプトです。さらに、host_name、database_name、table_nameなどのパラメーターを追加するなど、汎用的な使用のためにスクリプトを変更できます。