pg_dumpはPostgreSQLが提供してるコマンドラインツールで、データベースをバックアップファイルとしてエクスポートできるんだ。このファイルにはデータベースの構造だけ、データだけ、または両方を含めることができるよ。
pg_dumpの主なメリットは、サーバー間でデータを移行したり、障害発生後にデータベースをリストアしたり、長期保存用のアーカイブを作成したりできること。ちなみに、このユーティリティはデータベースファイルの物理コピーよりも、SQLクエリを使った論理バックアップ向きだよ。
pg_dumpコマンドの基本シンタックス
pg_dumpでバックアップを作成するには、ターミナルで次のコマンドを実行するだけ:
pg_dump -U username -d database_name -f backup_file.sql
コマンドの各部分を説明するね:
-U username— PostgreSQLに接続するユーザー名を指定する。-d database_name— バックアップを作成したいデータベース名を指定する。-f backup_file.sql— バックアップファイルの保存先を指定する。フルパスでも相対パスでもOK。
例:例えば、universityというデータベースがあって、それをuniversity_backup.sqlというファイルにバックアップしたい場合、コマンドはこうなる:
pg_dump -U postgres -d university -f university_backup.sql
このとき、PostgreSQLはpostgresユーザーのパスワードを聞いてくるよ。
ヒント:ローカルサーバーで作業してて毎回パスワード入力したくないなら、.pgpassファイルを設定しよう。詳しくはPostgreSQL公式ドキュメントをチェックしてみて。
パラメータとその使い方
pg_dumpユーティリティはめっちゃ柔軟で、いろんな設定でバックアップを作れるよ:
- データベース構造だけのバックアップを作成する
データベースの構造だけ(例えば新しいサーバーで展開したいとき)を保存したい場合は、--schema-onlyフラグを使おう。コマンド例:
pg_dump -U postgres -d university --schema-only -f university_schema.sql
これでCREATE TABLEやCREATE INDEXなどのコマンドだけが入ったSQLスクリプトができる。データは含まれないよ。
- データだけのバックアップを作成する
たまに構造じゃなくてデータだけ保存したいこともあるよね。その場合は--data-onlyフラグを使おう:
pg_dump -U postgres -d university --data-only -f university_data.sql
このファイルにはINSERT INTOコマンドが入ってて、データをリストアできるよ。
- バックアップの圧縮
バックアップファイルは、テーブルやデータが多いと結構大きくなる。ファイルサイズを小さくしたいなら、--compressパラメータを使おう:
pg_dump -U postgres -d university -f university_backup.sql --compress=6
圧縮レベルは0(圧縮なし)から9(最大圧縮)まで指定できる。高い圧縮レベルだとバックアップ作成に時間がかかるから注意してね。
- バイナリ形式でエクスポートする
もっと速くリストアしたい場合は、テキストのSQLスクリプトじゃなくてバイナリ形式でバックアップを保存できる:
pg_dump -U postgres -d university -Fc -f university_backup.dump
-FcはCustomフォーマットを指定してて、pg_restoreユーティリティでリストアできるよ。
バックアップ作成のサンプル
データベース全体のフルバックアップ
例えば、companyというデータベースがあって、構造もデータも全部バックアップしたい場合:
pg_dump -U postgres -d company -f company_backup.sql
1つのテーブルだけバックアップ
データベースの中の1つのテーブルだけ保存したいなら、-tパラメータを使おう:
pg_dump -U postgres -d company -t employees -f employees_backup.sql
このファイルにはemployeesテーブルの構造とデータだけが入るよ。
複数テーブルのバックアップ
複数のテーブルをバックアップしたい場合は、-tパラメータを複数回追加しよう:
pg_dump -U postgres -d company -t employees -t departments -f selected_tables_backup.sql
圧縮バックアップ
ディスク容量を節約したいなら、--compressフラグを使うか、最初から圧縮形式でファイルを作成しよう:
pg_dump -U postgres -d company -Fc -f company_backup_compressed.dump
便利なアドバイス
バックアップファイルのサイズをチェックしよう。 バックアップが小さすぎる場合はエラーが起きてるかも。--verboseパラメータでバックアップ作成の詳細情報を確認できるよ。
プロセスを自動化しよう。 cronやpg_cronを使って定期的にバックアップを作成しよう。古いバックアップのローテーションも忘れずに、ディスクがいっぱいにならないようにね。
バックアップの正しさを確認しよう。 テストサーバーでデータベースをリストアして、作成したバックアップがちゃんと使えるか試してみて。
よくあるエラー
認証エラー。 正しいユーザーを指定してなかったり、パスワードを忘れた場合、pg_dumpはエラーを出すよ。自動認証のために.pgpassファイルを設定しよう。
接続エラー。 PostgreSQLサーバーが起動してなかったり、データベース名を間違えた場合、ユーティリティはバックアップを作成できない。データベース名とサーバーの状態を確認してね。
権限の問題。 pg_dumpを実行するユーザーは、データベースの構造やデータを読み取る権限が必要。できれば管理者ロールを使おう。
GO TO FULL VERSION