目次
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
オプション をつけると、 データベース作成のコマンドも出力してくれます。