Table of Contents
MySQL の場合は MySQL: ダンプを保存せずにデータベースをコピー をご覧ください。
PostgreSQL のデータを移す際によくやるのは、 pg_dump でダンプデータを取得・保存して、 psql で流し込む方法です。
いちいちダンプファイルに保存するのも面倒なので、つなげてひとつのコマンドにしてみました。 ダンプファイルの保存は行いません。
パスワードなしの場合
データベースにはパスワードをつけていることがほとんどなのですが、まずは基本として確認しておきます。
|
1 |
pg_dump db_name_1 -h host_1 -U user_name_1 | psql db_name_2 -h host_2 -U user_name_2 |
パスワードがある場合
エクスポート元、インポート先のどちらかにパスワードがある場合
パスワードを聞かれた時に入力できるので、 必要に応じて -W をつければ OK です。
|
1 |
pg_dump db_name_1 -h host_1 -U user_name_1 -W | psql db_name_2 -h host_2 -U user_name_2 |
|
1 |
pg_dump db_name_1 -h host_1 -U user_name_1 | psql db_name_2 -h host_2 -U user_name_2 -W |
エクスポート元、インポート先の両方にパスワードがある場合
-W オプションをつけても、パスワードをうまく入力することができません(私はいい方法をみつけることができませんでした)。 そこで .pgpass ファイル を使います。
.pgpass
.pgpass にパスワードを記述してホームディレクトリに保存しておくと、 PostgreSQL 接続時 にパスワードを入力しなくても接続できるようになります。
.pgpass には次のように記述します。
|
1 2 |
example.com:5432:db_name_1:user_name_1:password_1 111.111.111.111:5432:db_name_2:user_name_2:password_2 |
左から順に、ホスト名またはIPアドレス、ポート番号、データベース名、ユーザ名、パスワード を “:” で区切って記述します。 複数ある場合は複数行に記述します。
そしてアクセス権限を 600 にしておきます。 この場合のみ .pgpass は有効になります。
.pgpass を作ったら、 次のようにしてエクスポート・インポートを同時に行えるようになります。 -W はつけません。
|
1 |
pg_dump db_name_1 -h host_1 -U user_name_1 | psql db_name_2 -h host_2 -U user_name_2 |
補足
pg_dump に -C オプション をつけると、 データベース作成のコマンドも出力してくれます。
