LoginSignup
7
3

More than 5 years have passed since last update.

PostgreSQL11でジョブを実行、管理するpgAgentを設定してみた

Posted at

はじめに

pgAgentはPostgreSQLでジョブを実行、および管理するエージェントです。
Linuxではデーモンとして稼働し、通常はデータベースサーバ上で稼働させます。

今回、以下の環境でpgAgentをインストールし、ジョブを作成してみました。

  • DBサーバ CentOS7.5、PostgreSQL
  • クライアント Windows10、pgAdmin4

サーバ側は以下の投稿で構築したものを利用しています。

クライアントではpgAdmin4をインストールし、ジョブの作成を行います。

環境構築

早速、環境を構築していきます。
構築手順は以下のpgAdmin公式ページを参考にしています。

まず、pgAgentをyumでインストールします。
CentOS用のPostgreSQLのリポジトリパッケージをインストール済みであることが前提条件となります。

# yum -y install pgagent_11.x86_64

Installed:
  pgagent_11.x86_64 0:4.0.0-1.rhel7.1                                                                                                                                                      

Dependency Installed:
  boost-atomic.x86_64 0:1.53.0-27.el7         boost-chrono.x86_64 0:1.53.0-27.el7         boost-date-time.x86_64 0:1.53.0-27.el7         boost-filesystem.x86_64 0:1.53.0-27.el7        
  boost-regex.x86_64 0:1.53.0-27.el7          boost-system.x86_64 0:1.53.0-27.el7         boost-thread.x86_64 0:1.53.0-27.el7           

Complete!

pgAdminを使用してpgAgentを管理する前に、データベースにpgAgentエクステンションを作成します。これにより"pgagent"スキーマにテーブルや他のオブジェクトが作成されます。

$ psql -U postgres
psql (11.2)
Type "help" for help.

postgres=# CREATE EXTENSION pgagent;
CREATE EXTENSION

pgAgentではpostgresユーザでパスワード不要でログインできるようにしておく必要があります。必要に応じて以下のpgpassの設定を実施します。

$ vi ~/.pgpass
127.0.0.1:5432:postgres:postgres:postgres
ホスト名:ポート番号:データベース名:ユーザ名:パスワード

$ chmod 600 ~/.pgpass

pgAgentを起動するため、DBサーバ上でpgAgentを以下のコマンドで起動します。
※これだとOS起動の度に実行することになるので、systemctlで登録しておくのが良いかと思います。

$/usr/bin/pgagent_11 hostaddr=127.0.0.1 dbname=postgres user=postgres

pgAdminを使ってジョブを作成する

ジョブを作成または管理するには、pgAdminを使用します。
ジョブの作成方法は以下の公式サイトを参考にしています。

まず、pgAdminを起動し、「pgAgent_Jobs」のコンテキストメニューから「Create」-「pgAgent Job...」を選択します。
※pgAdminのインストール方法は省略。

image.png

「Create - pgAgent Job」のダイアログが表示されますので、ここからジョブ、ステップ等を作成していきます。
まずは、「General」タブで、「Name」を適当に入力します。

image.png

次に「ステップ」タブでジョブが実行するステップを定義します。
新しいステップを追加するために、"+"をクリックし進めていくと以下のような画面になります。
今回はステップの名前だけ入力しています。

image.png

次に「Code」タブを選択し、実行するコードを入力します。
今回は何でもよかったので以下のようにコンソールに出力するだけのコードを書いています。

image.png

次に「スケジュール」タブからジョブを実行するスケジュールを決定します。
「General」タブではNameとStart(ジョブの開始)を入力します。

image.png

「Repeat」タブにて具体的にジョブをいつ実行するかを設定します。
以下は毎分実行するように指定しています。(Hoursとかは設定しなくても同じかもしれませんが)

image.png

後は「Save」して終わりです。

1分ごとに実行されていますので、ジョブの実行結果をpga_joblog、pga_jobsteplogテーブルで確認してみます。

postgres=# select * from pgagent.pga_joblog order by jlgstart desc limit 1;
 jlgid | jlgjobid | jlgstatus |           jlgstart            |   jlgduration   
-------+----------+-----------+-------------------------------+-----------------
   206 |        1 | s         | 2019-05-11 10:01:03.607376+02 | 00:00:00.009261
(1 row)

postgres=# select * from pgagent.pga_jobsteplog order by jslid desc limit 1;
 jslid | jsljlgid | jsljstid | jslstatus | jslresult |           jslstart            |   jslduration   | jsloutput 
-------+----------+----------+-----------+-----------+-------------------------------+-----------------+-----------
   206 |      206 |        1 | s         |         0 | 2019-05-11 10:01:03.609999+02 | 00:00:00.005754 | 
(1 row)

jlgstatus、jslstatusが"s"だと成功のようです。

今回はざっくりとお試しで使ってみただけなので、後日もう少し調べていきたいと思います。

参考

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3