PostgreSQL: ダンプを保存せずにデータベースをコピー


MySQL の場合は MySQL: ダンプを保存せずにデータベースをコピー をご覧ください。

PostgreSQL のデータを移す際によくやるのは、 pg_dump でダンプデータを取得・保存して、 psql で流し込む方法です。

いちいちダンプファイルに保存するのも面倒なので、つなげてひとつのコマンドにしてみました。 ダンプファイルの保存は行いません。

パスワードなしの場合

データベースにはパスワードをつけていることがほとんどなのですが、まずは基本として確認しておきます。

パスワードがある場合

エクスポート元、インポート先のどちらかにパスワードがある場合

パスワードを聞かれた時に入力できるので、 必要に応じて -W をつければ OK です。

エクスポート元、インポート先の両方にパスワードがある場合

-W オプションをつけても、パスワードをうまく入力することができません(私はいい方法をみつけることができませんでした)。 そこで .pgpass ファイル を使います。

.pgpass

.pgpass にパスワードを記述してホームディレクトリに保存しておくと、 PostgreSQL 接続時 にパスワードを入力しなくても接続できるようになります。

.pgpass には次のように記述します。

左から順に、ホスト名またはIPアドレス、ポート番号、データベース名、ユーザ名、パスワード を “:” で区切って記述します。 複数ある場合は複数行に記述します。

そしてアクセス権限を 600 にしておきます。 この場合のみ .pgpass は有効になります。

.pgpass を作ったら、 次のようにしてエクスポート・インポートを同時に行えるようになります。 -W はつけません。

補足

pg_dump-C オプション をつけると、 データベース作成のコマンドも出力してくれます。