pgAdminのpgAgentでPostgreSQLの自動バックアップをスケジュールする方法

紹介

pgAgentは、PostgreSQLデータベースのジョブをスケジュールするためのツールです。また、一般的に使用されるcronよりも強力なスケジューリング機能を持っています。なぜなら、pgAgentはPostgresタスクを処理するために特に構築されているからです。例えば、pgAgentはバッチスクリプトやコマンドの繰り返しをせずに複数のステップをスケジュールすることができます。重要なのは、pgAdminがインストールされていても、pgAgentは独立してダウンロードする必要がある点です。

このチュートリアルでは、pgAgentをインストールし、データベースをpgAdminグラフィカルユーザーインターフェイス(GUI)でpgAgentを使用するように構成し、pgAgentをデーモンとして設定し、データベースのバックアップをスケジュールするジョブを設定します。

前提条件

このチュートリアルに従うには、次のものが必要です:

ステップ1 — pgAgentのインストール

前述のように、pgAdminをインストールするとpgAgentが自動的に構成されません。次のコマンドを実行して、ターミナルからapt installとパッケージ名pgagentを実行することで、pgAgentをインストールできます。

  1. sudo apt install pgagent

pgAgentをインストールしたら、次のステップに進んで、pgAdminでデータベースをpgAgentで使用するように構成します。

ステップ2 — データベースのpgAgent用の構成

準備が整ったら、pgAdminを設定して使用できます。pgAdminを介してデータベースをpgAgentの使用に設定できます。ウェブブラウザを開き、pgAdminアプリケーションに移動します。 http://your_domain。アカウントにログインしたら、左側のパネルのツリーコントロールに移動します。作成したsammyという名前のデータベースを見つけてリストを展開します。このリストから、Extensionsというオプションがあります。それを見つけたら、右クリックしてクエリツールを選択します:

Select the Query Tool from the Extensions drop-down list

pgAgentを使用するには、pgAdminでデータベースに拡張機能をロードする必要があります。これを行うには、次のクエリを記述して横向きの矢印をクリックし、実行コマンドを実行します:

  1. CREATE EXTENSION pgagent;

このステップは、次の例に示すように、クエリツール機能で表されています:

Run the CREATE EXTENSION command

メッセージタブの下に、クエリが300ミリ秒で正常に返されました。という出力が表示されます。これにより、pgAgent拡張機能が正常に作成されたことが確認されます。

注意:データベースに適切なplpgsql言語がロードされていない場合、次のエラーメッセージが表示されます:

Output
ERROR: language "plpgsql" does not exist HINT: Use CREATE EXTENSION to load the language into the database. SQL state: 42704

これが発生した場合は、必要なpl/pgsqlプロシージャ言語をインストールするためにCREATE LANGUAGEを実行する必要があります。次のコマンドを実行してこれをインストールできます。

  1. CREATE LANGUAGE plpgsql;

pl/pgsql言語をインストールしたら、下部にメッセージが表示され、Query returned successfully in 231 msec.のようなものが表示されます。その後、前のCREATE EXTENSION pgagentクエリを再実行してください。

これらのクエリを実行した後、Extensionsの下にはpgagentplpgsqlの2つのアイテムがリストされます:

pgAgent and plpgsql language listed

A new item in the tree control on the left-hand side will appear called pgAgent Jobs. This signifies that pgAgent was successfully installed on your pgAdmin account. Next, you will set up pgAgent as a daemon so that it can run your jobs successfully.

注意:これらのアイテムがすぐに表示されない場合は、ブラウザのページをリフレッシュしてください。クエリが成功していれば表示されるはずです。

ステップ3 — pgAgentをデーモンとして設定

pgAdminを介してデータベースにpgAgentをインストールおよび構成したら、次にpgAgentをサーバー上のデーモンとして設定する必要があります。 デーモン は、バックグラウンドで連続プロセスとして実行され、サービスタスクを実行します。pgAgentはUnixシステム上でデーモンとして実行され、通常はデータベースサーバー自体で実行されます。

デーモンとしてpgAgentを設定するには、PostgreSQL接続文字列が必要です。ジョブをスケジュールするときに、プロセスが適切に実行されるようにするためのものです。この場合、PostgreSQL libpq接続文字列を設定しています。これはユーザー固有の文字列であり、特定の設定に接続します。PostgreSQL libpq接続関数については、PostgreSQLドキュメントで詳細を確認できます。

接続文字列には、ホスト名、データベース名、およびユーザー名の資格情報が含まれます。この例では、ホストはUnixドメインソケットを使用し、データベース名はsammy、ユーザー名はsammyです。この文字列は、デーモンを起動するためにpgagentコマンドに追加されます。ターミナルで、次のコードを実行します:

  1. pgagent host=/var/run/postgresql dbname=sammy user=sammy

出力に何も表示されず、接続エラーメッセージも表示されない場合、接続文字列の設定が成功しています。

接続文字列を作成したら、pgAgentでジョブをスケジュールする準備が整います。

ステップ4 — pgAgentでのジョブのスケジューリング

pgAgentは、ジョブを実行および管理し、1つ以上のステップまたはスケジュールのジョブを作成できるスケジューリングエージェントとして機能します。例えば、ステップにはシェルスクリプト上の複数のSQLステートメントが含まれ、他のステップの後に順次実行されます。全体として、pgAgentを使用してジョブをスケジュール、管理、変更、または無効にすることができます。

このチュートリアルでは、pgAgentを使用して、週の各日の毎分データベースをバックアップするジョブを作成します。 sammyを右クリックし、pgAgentジョブを選択し、次に以下のように作成pgAgentジョブ…を選択します。

Create your pgAgent Job

一度これを行うと、作成 – pgAgentジョブというタイトルのプロンプトが表示され、一般タブで必要な情報の入力を開始できます。 この例では、名前をsammy_backupとし、ホストエージェントを指定しないことにします。 なぜなら、このジョブを任意のホストで実行できるようにしたいからです。 さらに、ジョブクラス定期メンテナンスのままにします。 他にコメントを含めたい場合は、コメントセクションに自由に記入してください。

Prompt for creating your pgAgent job

次に、ステップタブに移動します。 右上隅の+シンボルをクリックしてステップを作成します。 この例では、このステップの名前をstep1とします。 次に、オプションを展開するには、ゴミ箱アイコンの左側にある鉛筆をクリックします。 有効?ボタンはデフォルトでオンになっており、このステップが実行されるときに含まれることを示します。

種類オプションでは、SQLまたはバッチを選択できます。ここではバッチを選択しました。この例ではバッチを選択する理由は、これがデータベースのスケジュールされたバックアップに設定する適切なPostgreSQLコマンドを実行するからです。 SQLオプションは、生のSQLを実行するジョブをスケジュールするために利用できます。この場合、接続タイプにはローカルを選択して、ステップがローカルサーバーで実行されるようにしますが、お好みでリモートを選択して、任意のリモートホストを選択することもできます。リモートホストで行いたい場合は、接続文字列フィールドにその条件を指定する必要があります。 ステップ1に従った場合、接続文字列はすでに設定され、接続されています。

データベースフィールドでは、正しいデータベースが選択されていることを確認してください。ここではsammyが指定されています。 エラー時オプションでは、ステップの処理中にエラーが発生した場合のpgAgentの応答をカスタマイズできます。この場合、ステップの処理中にエラーが発生した場合に通知するために失敗を選択しました。さらに、追加の注記を追加したい場合は、コメントボックスに追加できます。

Create a step for your pgAgent job

同じステップタブ内には、コードタブもあります。この例で選択したように、バッチを選択した場合は、コードタブに移動します。このタブに入ると、PostgreSQLコマンドを挿入するための空行があります。独自のオプションセットでこのバックアップコマンドを挿入してください。有効なコマンドであれば何でも受け付けられます。

このチュートリアルでは、pg_dumpコマンドを使用してPostgresデータベースsammyをバックアップします。このコマンドには、特定のユーザー名、データベース名、および--cleanフラグが含まれており、これはpg_dumpがデータベースオブジェクトを生成する前にデータベースオブジェクトを削除または「クリーニング」するのに役立ちます。--fileフラグでは、バックアップファイルが保存される正確な場所が指定されています。このステートメントの最後の部分date +%Y-%m-%d-%H-%M-%Sは、日付と複数のファイルを動的に生成して各バックアップごとにそれを追跡できるようにします。そうしないと、バックアップファイルは常に既存のものを上書きして保存します。この方法で、予定された任意の時間または日付の各バックアップファイルを追跡できます。

pg_dump --username=sammy --dbname=sammy --clean --file=/home/sammy/backup-`date +%Y-%m-%d-%H-%M-%S`.sql
Add command in Code tab for pgAgent step

注意: バックアップファイルを異なる場所に保存する場合は、選択したディレクトリへの絶対パスを使用してください。たとえば、通常~//home/sammy/のホームディレクトリを指しますが、この場合はpg_dump/home/sammy/の絶対パスを要求するためです。

一度バックアップコマンドを追加したら、スケジュールタブに移動できます。 ステップを設定する場合と同様に、+記号をクリックしてスケジュールを追加し、その後、希望の名前を入力し、ご希望のオプションを展開する際にゴミ箱アイコンの隣にある鉛筆アイコンをクリックします。 一般タブの下に、この例では入力した名前があります。ここでは、スケジュール1です。再度、有効はデフォルトでオンになっており、スケジュールが適切に実行されるようになっています。 開始および終了オプションでは、スケジュールされたジョブの開始日時と終了日時を指定します。スケジュールされたジョブをテストするため、現在の時間が開始終了の範囲内にあることを確認してください。お好みでコメントにメモを追加してください。

pgAgent Schedule options

今、リピートタブに進んでください。ここでは、このスケジュールされたジョブを実行する頻度をカスタマイズできます。週、月、日付、時間、または分でできるだけ具体的に指定できます。選択しない場合、これはすべて選択と同じです。したがって、平日を空白のままにすると、スケジュールはすべての平日を考慮します。同様に、時間では、時間または分を空白のままにして、これはすべて選択と同じです。時間は cron スタイルの形式であり、したがって、この例ではバックアップを毎分生成するには、1時間のすべての分 (00から59) を選択する必要があります。これを示すために、分にはすべて選択を選択しました。すべての分がリストされますが、空白にすると同じ結果になります:

Customize dates and times for job schedule on Repeat tab

実行したくない日や時間がある場合は、より細かい時間スケジュールを作成するか、例外タブに移動して設定できます。

注意:スケジュールに基づいてジョブも実行されるため、いつでも変更されると、スケジュールされた実行時刻が再計算されます。これが発生すると、pgAgent は過去のスケジュールされた実行時刻の値をデータベースからポーリングし、通常その指定された開始時間の約1分後に開始します。問題がある場合は、pgAgent が再起動すると、設定した定期スケジュールに戻ります。

設定とスケジュールのカスタマイズが完了したら、保存ボタンを押してください。左側のツリーコントロールには、新しいpgAgentジョブが表示され、ジョブの名前が表示されます。この例では、sammy_backupスケジュールおよびステップとともに表示されます:

Your pgAgent backup job step and schedule will now be listed

pgAgentジョブが正常に作成されたので、次のステップでは、pgAgentジョブが正常に実行されているかどうかを確認する方法について学びます。

ステップ5 — pgAgentジョブの確認

データベースのバックアップファイルを毎分作成する予定のジョブが正常に動作しているかどうかは、いくつかの方法で確認できます。pgAdminでは、左側のツリーコントロールに移動し、sammy_backupをクリックします。そこから統計と表示されるタブに移動します。統計ページには、スケジュールされたジョブの各インスタンスが以下のようにリストされます:

Verify if your job is working with pgAgent’s Statistics tab

統計情報はすぐに表示または更新されない場合があるため、別の場所に移動したり、ブラウザを更新する必要があるかもしれません。ジョブは一定の間隔で実行されるようにスケジュールされているため、これを考慮して日付や時間を設定してください。

次のコマンドを実行して、ジョブが機能していることを確認する場合は、コマンドラインからls ~コマンドを実行できます。このチュートリアルでは、ステップ 4pg_dumpコマンドを記述する際に、このホームディレクトリの正確な場所を設定します。

  1. ls ~

出力には、バックアップファイルが保存されるたびに、それぞれのインスタンスがリストされます。

ステップ 6 — pgAgent ジョブの修正、無効化、削除、および手動実行 (オプション)

pgAgent は、ジョブの修正や無効化に関して柔軟性を提供しています。pgAdmin を使用して、この場合はsammy_backupの特定の pgAgent ジョブに移動し、リストからプロパティオプションを選択します。ここから、ジョブを変更するために上部の鉛筆アイコンを押すことができます:

pgAgent Properties options such as modifying your job

プロパティにいて、鉛筆アイコンを押すと、スケジュールタブに移動して、次のようにジョブを無効にできます:

You can disable your pgAgent job in the Properties tab

また、左側のツリーコントロールから、pgAgentジョブを右クリックすると、ジョブを完全に削除するためにDELETE/DROP選択を選択できます。ジョブを手動で実行したい場合は、同じ手順を繰り返し、今度はリストからRUN NOW選択を選択します:

You can also choose to delete or manually run your job from the drop-down list

これらは、pgAgentを使用してジョブをスケジュールするためのいくつかの機能にすぎませんが、他にも多くの可能性があります。例えば、データベース内のすべてのユーザーとロールのバックアップを作成するジョブをスケジュールしたい場合、pg_dumpall --globals onlyコマンドを使用することができます。バッチジョブでより複雑なスクリプトを使用することもでき、これについてはPostgreSQLウィキページで詳しく学ぶことができます。

結論

pgAgentは、日常の退屈ながらも必要なタスク、例えばデータベースの定期的なバックアップなど、さまざまなジョブをスケジュールするのに役立ちます。このツールをもっと使い慣れてきたら、複雑なスケジューリングが必要なマルチステップジョブやSQLタスクの作成も試すことができます。さらに詳しく学びたい場合は、pgAdminウェブサイトの公式pgAgentドキュメントを読んでみてください。

Source:
https://www.digitalocean.com/community/tutorials/how-to-schedule-automatic-backups-for-postgresql-with-pgagent-in-pgadmin