PostgreSQLとは何ですか?

PostgreSQLは最新のデータベース管理システムです。 Webサイトやアプリケーションに関連する情報を保存および操作するために頻繁に使用されます。

あらゆる種類の貴重なデータと同様に、データの損失から保護するためにバックアップスキームを実装することが重要です。 このガイドでは、PostgreSQLデータをバックアップするための実用的な方法について説明します。

PostgreSQL9.1でUbuntu12.04VPSを使用します。 最新のディストリビューションとPostgreSQLの最近のバージョンは、同様の方法で動作します。

pg_dumpを使用してPostgreSQLデータベースをバックアップする方法

PostgreSQLには、バックアップ目的でデータベース情報をファイルにダンプするために使用できる「pg_dump」と呼ばれるユーティリティが含まれています。

pg_dumpユーティリティはLinuxコマンドラインから実行されます。 コマンドの基本的な構文は次のとおりです。

pg_dump name_of_database > name_of_backup_file

このコマンドは、すべてのデータベース情報を読み取る権限を持つユーザーが実行する必要があるため、ほとんどの場合、スーパーユーザーとして実行されます。

実際の例では、「postgres」ユーザーにログインして、「postgres」とも呼ばれるデフォルトのデータベースでコマンドを実行できます。

sudo su - postgres
pg_dump postgres > postgres_db.bak

このコマンドは実際にはPostgreSQLクライアントプログラムであるため、リモートシステムがデータベースにアクセスできる限り、そのシステムから実行できます。

リモートシステムをバックアップする場合は、リモートホストを指定するための「-h」フラグと、リモートポートを指定するための「-p」フラグを渡すことができます。

pg_dump -h remote_host -p remote_port name_of_database > name_of_backup_file

必要に応じて、「-U」オプションを使用して別のユーザーを指定することもできます。 構文は次のようになります。

pg_dump -U user_name -h remote_host -p remote_port name_of_database > name_of_backup_file

pg_dumpには、他のクライアントプログラムと同じ認証要件が存在することに注意してください。 これは、バックアップしようとしているシステムに対してログイン資格情報が有効であることを確認する必要があることを意味します。

PostgreSQLを使用してpg_dumpからデータダンプを復元する方法

pg_dumpによって作成されたバックアップを復元するには、ファイルをpsql標準入力にリダイレクトできます。

psql empty_database < backup_file

注:このリダイレクト操作では、問題のデータベースは作成されません。 これは、コマンドを実行する前に別の手順で実行する必要があります。

たとえば、「restored_database」という名前の新しいデータベースを作成してから、次のコマンドを発行して「database.bak」という名前のダンプをリダイレクトできます。

createdb -T template0 restored_database
psql restored_database < database.bak

空のデータベースは、「template0」をベースとして作成する必要があります。

正しく復元するために実行する必要があるもう1つの手順は、データベース内のオブジェクトに対するアクセス許可を所有または付与しているユーザーを再作成することです。

たとえば、データベースにユーザー「test_user」が所有するテーブルがある場合、インポートする前に復元システムでテーブルを作成する必要があります。

createuser test_user
psql restored_database < database.bak

復元エラーへの対処

デフォルトでは、PostgreSQLは途中でエラーが発生した場合でも、データベースの復元を続行しようとします。

多くの場合、これは明らかな理由で望ましくありません。 データベースを適切な状態に復元するために必要な操作を整理するのは難しい場合があります。

次のように入力することで、エラーが発生した場合に停止するようPostgreSQLに指示できます。

psql --set ON_ERROR_STOP=on restored_database < backup_file

これにより、エラーが発生するとPostgreSQLの復元操作がすぐに停止します。

これにより、完全に復元されていない不自由なデータベースが残りますが、最後にエラーのリストを処理する代わりに、エラーが発生したときにエラーを処理できるようになりました。

多くの状況でより適切なオプションは、「-1」(ナンバーワン)または「–single-transaction」オプションです。

psql -1 restored_database < backup_file

このオプションは、単一のトランザクションですべての復元の詳細を実行します。

このオプションと「ON_ERROR_STOP」設定の違いは、これが完全に成功するか、何もインポートしないことです。

これは、大規模な復元ではコストのかかるトレードオフになる可能性がありますが、多くの場合、部分的に復元されたデータベースを残さないという利点は、そのコストを大幅に上回ります。

PostgreSQLですべてのデータベースをバックアップおよび復元する方法

時間を節約するために、システム内のすべてのデータベースをバックアップする場合は、「pg_dumpall」というユーティリティがあります。

コマンドの構文は通常のpg_dumpコマンドと非常に似ていますが、データベースを指定していません。 代わりに、このコマンドは使用可能なすべてのデータベースをバックアップします。

pg_dumpall > backup_file

デフォルトのデータベースを使用して、ファイルをpsqlに渡すことにより、データベースを復元できます。

psql -f backup_file postgres

結論

バックアップは、あらゆる種類のデータストレージプランに不可欠なコンポーネントです。 幸い、PostgreSQLには、重要な情報を効果的にバックアップするために必要なユーティリティが用意されています。

他の種類のバックアップと同様に、バックアップを定期的にテストして、作成されたコピーが正しく復元できることを確認することが重要です。 作成したバックアップは、システムのリカバリに実際に使用できる場合にのみ役立ちます。

ジャスティン・エリングウッド