本番用のPostgreSQLデータベースを開発用サーバにコピーしようと思っています。これを実行するための最も迅速で簡単な方法は何ですか?
中間ファイルを作成する必要はありません。できるよ
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 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
がこれを実行するためのより良い方法と思われます。
バックアップしたいデータベース名を指定してこのコマンドを実行し、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 /フォルダで以下のコマンドを実行して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つのデータベースで使用していたロールが異なっていたので、ダンプ内のすべての所有者名を検索して置き換える必要がありました。
あるサーバーから別のPostgreSQLサーバーにテーブルデータをコピーするためのLinuxシェルスクリプトを共有しましょう。
PostgreSQLサーバー間のデータ移行のためのLinux Bashシェルスクリプト:
#!/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などのパラメーターを追加するなど、汎用的なスクリプトを変更することもできます。
データベースをダンプします。pg_dump database_name_name > backup.sql
データベースをインポートします。psql db_name < backup.sql
受け入れられた答えは正しいですが、対話的にパスワードを入力したくない場合は、これを使用できます。
PGPASSWORD={{export_db_password}} pg_dump --create -h {{export_db_Host}} -U {{export_db_user}} {{export_db_name}} | PGPASSWORD={{import_db_password}} psql -h {{import_db_Host}} -U {{import_db_user}} {{import_db_name}}