「pgAdminでpgAgentを使用してPostgreSQLの自動バックアップスケジュールを設定する方法」

はじめに

pgAgentは、PostgreSQLデータベースのジョブをスケジュールするために使用されるツールです。通常使用されるcronよりも強力なスケジュール機能を持っており、Postgresのタスクを扱うために特別に作られています。たとえば、pgAgentはバッチスクリプトやコマンドの繰り返し無しで複数のステップをスケジュールすることができます。pgAdminがインストールされていても、pgAgentは独立してダウンロードする必要があります。具体的には、pgAdminの拡張機能としてダウンロードする必要があります。

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

前提条件

このチュートリアルを実施するためには、次のものが必要です:

  • An Ubuntu 22.04 server set up with a non-root sudo enabled user and firewall. You can do this by reading our Initial Server Setup guide
  • PostgreSQL installed on your server. You can set this up by following our guide on How To Install and Use PostgreSQL on Ubuntu 22.04. As you follow this guide, be sure to create a new role and database, as you will need both to connect pgAdmin to your PostgreSQL instance
  • pgAdmin installed with an account set up. You can do this by following our tutorial on How To Install and Configure pgAdmin4 in Server Mode on Ubuntu 22.04

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

前述の通り、pgAdminをインストールした際にはpgAgentが自動的に設定されていません。次のコマンドを使用して、ターミナルからapt installとパッケージ名pgagentを実行することで、pgAgentをインストールすることができます。

  1. sudo apt install pgagent

 

pgAgentをインストールした後は、次のステップに進んで、pgAdminでデータベースをpgAgentを使用するように設定してください。

ステップ2 – pgAgentのためのデータベースの設定を行います。

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

Query Tool option from Extensions

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

  1. CREATE EXTENSION pgagent;

 

次に示す例では、クエリツール機能を使用したこの手順を示しています。

CREATE EXTENSION command in Query Tool

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

Note

注意:データベースに適切なplpgsql言語が読み込まれていない場合は、以下のエラーメッセージが表示されます:
OutputERROR: 言語「plpgsql」が存在しません
HINT: データベースに言語を読み込むには、CREATE EXTENSIONを使用してください。
SQL state: 42704

これが起こった場合、必要なpl/pgsql手続き言語をインストールするためにCREATE LANGUAGEを実行する必要があります。以下のコマンドを実行することでインストールできます:
CREATE LANGUAGE plpgsql;

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

これらのクエリを実行した後、[Extensions] の下には、pgagent と plpgsql の二つの項目がリストされます。

pgAgent extensions listed

左側のツリーコントロールに新しい項目が表示され、それは「pgAgent Jobs」と名付けられています。これは、pgAgentが正常にpgAdminアカウントにインストールされたことを示しています。次に、pgAgentをデーモンとして設定し、ジョブを正常に実行できるようにします。

Note

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

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

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

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

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

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

 

出力に何も返らず、接続エラーメッセージも受け取らない場合、接続文字列の設定は成功したと言えます。

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

ステップ4 — pgAgentを使用してジョブをスケジュールする

pgAgentは、ジョブを実行および管理し、1つ以上のステップまたはスケジュールのジョブを作成するスケジューリングエージェントとしての役割を果たします。例えば、ステップはシェルスクリプト上の複数のSQL文から構成され、他のステップに連続して実行されます。全体的には、pgAgentを使用してジョブをスケジュールし、管理、変更、または無効化することができます。

このチュートリアルでは、pgAgentを使用して、各曜日ごとに毎分サミーデータベースのバックアップを作成するジョブを作成します。以下のように、pgAgent Jobsを右クリックし、「作成」を選択してから、「pgAgent Job…」を選択することで始めることができます。

pgAgent job selection

この作業を行うと、「作成 – pgAgentジョブ」というプロンプトが表示され、一般タブで必要な情報を入力することができます。この例では、”sammy_backup”という名前を使用し、任意のホストでこのジョブを実行できるようにホストエージェントを指定しません。さらに、ジョブクラスは通常のメンテナンスのままにしておきます。その他のコメントを含めたい場合は、コメントセクションで自由に入力してください。

Create pgAgent job prompt

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

親切なオプションには、SQLまたはバッチのいずれかを選択できますが、ここではバッチを選択しました。この例では、データベースの予定されたバックアップに設定する適切なPostgreSQLコマンドを実行するためにバッチを選択する理由は、これが実行されるものだからです。SQLオプションは、生のSQLを実行するジョブをスケジュールするために使用できます。この場合、接続タイプとして「ローカル」を選択しましたので、手順はローカルサーバー上で実行されますが、ご希望の場合は、遠隔のホストのために「リモート」を選択することもできます。遠隔ホストで実行する場合は、接続文字列フィールドでその条件を指定する必要があります。ステップ1に従っている場合は、接続文字列がすでに設定されて接続されています。

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

pgAgent job Steps option

同じ「ステップ」タブ内には、「コード」タブもあります。この例では「バッチ」を選択した場合は、その「コード」タブに移動します。このタブに入ると、PostgreSQLコマンドを挿入するための空行があります。バックアップコマンドを独自のオプションセットで置き換えることができます。有効なコマンドならどれでも使用できます。

このチュートリアルでは、pg_dumpコマンドを使用してPostgresデータベースのsammyをバックアップします。このコマンドには、特定のユーザー名、データベース名、および–cleanフラグを含めます。–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
pgAgent Steps code

Note

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

バックアップコマンドを追加した後、スケジュールというタブに移動することができます。ステップを設定するときと同様に、+記号をクリックしてスケジュールを追加し、希望の名前を入力し、ゴミ箱アイコンの隣にある鉛筆アイコンをクリックしてオプションを展開します。一般タブの中には、あなたが書いた名前が表示されます。この例では、schedule1です。再度、Enabledはスケジュールが正しく実行されるようにデフォルトでオンになっています。スタートとエンドのオプションでは、スケジュールされたジョブの開始日時と終了日時を指定します。スケジュールされたジョブをテストするために、現在の時刻が開始と終了の範囲内にあることを確認してください。希望があれば、コメントにメモを追加します。

pgAgent Schedule tab

今、繰り返しタブに進んでください。ここでは、スケジュールされたジョブの実行頻度をカスタマイズできます。週、月、日付、時間、または分単位で詳細に指定することができます。ただし、選択しない場合は「すべて選択」と同じですので注意してください。したがって、曜日欄を空白のままにすると、スケジュールにはすべての平日が考慮されます。同様に、時間の場合も、時間または分を空白のままにすると、「すべて選択」と同じです。時間はcronスタイルの形式で表示されますので、この例では、バックアップを毎分生成するために、1時間のすべての分を選択する必要があります(00から59まで)。これを実証するために、私たちは分の「すべて選択」を選びました。すべての分がリストされますが、空白にしても同じ結果が得られます。

pgAgent Schedule Repeat tab

もし仕事を実行したくない日や時間がある場合は、より詳細な予定を作成するか、例外タブに移動して設定することができます。

Note

注意:仕事はスケジュールに基づいて実行されるため、いつでも変更が加えられると、予定された実行時間が再計算されます。この場合、pgAgentは過去の予定実行時間の値をデータベースから取得し、通常はその指定された開始時刻から1分以内に開始されるでしょう。問題がある場合は、pgAgentが再起動した際には、設定した通常のスケジュールに戻ります。

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

pgAgent backup job listed

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

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

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

pgAgent job Statistics tab

統計データが即座に表示または更新されない可能性があるため、別のページに移動したりブラウザを更新する必要があるかもしれません。また、ジョブは一定の間隔で実行されるようにスケジュールされていることを忘れずに、周期的な日時やより長い時間を設定する場合にはこれを考慮してください。

もしコマンドラインからジョブが正常に動作していることを確認したい場合、ls ~コマンドを実行してホームディレクトリのファイルをリスト表示することができます。このチュートリアルでは、ステップ4でpg_dumpコマンドを書く際に、このホームディレクトリの正確な場所を設定します。

  1. ls ~

 

バックアップファイルの保存されている各インスタンスが表示されます。

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

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

pgAgent Properties option

もし「プロパティ」画面にいて鉛筆のアイコンを押すと、以下の手順で「スケジュール」タブに移動し、自分の仕事を無効にできます。

pgAgent disabling a job

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

Other pgAgent options

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

結論

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

コメントを残す 0

Your email address will not be published. Required fields are marked *