web-dev-qa-db-ja.com

PostgreSQLデータベースを他のサーバにコピーする

本番用のPostgreSQLデータベースを開発用サーバにコピーしようと思っています。これを実行するための最も迅速で簡単な方法は何ですか?

445
Robin Barnes

中間ファイルを作成する必要はありません。できるよ

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"

しかし、この解決策では両端でセッションを確立する必要があります。

590
Ferran
pg_dump the_db_name > the_backup.sql

それからバックアップをあなたの開発サーバーにコピーし、以下で復元します。

psql the_new_dev_db < the_backup.sql
119
unmounted

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
37
user80168

バージョン間の移行を検討している場合(例えばpostgresを更新し、9.1をlocalhost:5432で実行し、9.3をlocalhost:5434で実行している場合)は、以下を実行できます。

pg_dumpall -p 5432 -U myuser91 | psql -U myuser94 -d postgres -p 5434

移行に関するドキュメント をご覧ください。

21
Eric H.

特に大規模データベースでは、pg_basebackupがこれを実行するためのより良い方法と思われます。

13

バックアップしたいデータベース名を指定してこのコマンドを実行し、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
6
user01

私はかなり苦労しました、そして結局私がそれを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つのデータベースで使用していたロールが異なっていたので、ダンプ内のすべての所有者名を検索して置き換える必要がありました。

4
pastullo

あるサーバーから別の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などのパラメーターを追加するなど、汎用的なスクリプトを変更することもできます。

3
Anvesh

データベースをダンプします。pg_dump database_name_name > backup.sql


データベースをインポートします。psql db_name < backup.sql

2
MisterJoyson

受け入れられた答えは正しいですが、対話的にパスワードを入力したくない場合は、これを使用できます。

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}}
0
zoran