PostgreSQL: pg_dump を使ってデータベースをコピーする

pg_dump はデータベース構造、データ、あるいはその両方を SQL スクリプトとして出力できるツールである。
old_db から new_db にデータをコピーするには次の手順でコマンドを実行する。

1. 新しいデータベースを作成する

まず createdb コマンドを使い、コピー先となるデータベースを作成する。

% createdb -U postgres --encoding=UTF-8 new_db --owner=foo

データベースの作成権限のあるユーザ(ここでは postgres)で作成し、オプションでデータベースの所有者を foo に渡している。

2. 既存のデータを SQL ファイルに出力する

% pg_dump -U postgres -O old_db > dump.sql

ここでユーザを postgres としたが、 old_db を読み取れるユーザならば何でもよい。
-O オプションを使うことで、テーブルの所有者を指定するコマンドを省略することができる。
出力は標準出力になされるので、リダイレクトを使ってファイルに出力している。

3. 新しいデータベースにデータを取り込む

2 の手順で出力されるファイルはそのまま SQL 文として実行可能なので、 psql を使って取り込んでやればよい。

% psql -U foo new_db < dump.sql

もちろんファイルを介さず直接このコマンドにパイプすることもできる。