データベースの更新を監視(PostgreSQL)

データベース(PostgreSQL)の指定したテーブルを定期的に監視し、更新されているレコードを取り込みます。
更新されているレコードの検出には、指定のテーブルのTimestamp型のフィールドを使用し、 このフィールドの値が更新されているレコードが取り込みの対象になります。

本アクションを使用するためには、指定のテーブルにTimestamp型のフィールドを追加し、 レコードのINSERT時やUPDATE時にそのフィールドが最新日時に更新されるようにしてください。

■プロパティ

名前説明
データベースタイプ 接続するデータベースの種類を選択します。
ドライバー データベースに接続するためのJDBCドライバーを指定します。
URL 接続先データベースのURLを指定します。
ユーザー データベースに接続するときのユーザー名を指定します。
パスワード データベースに接続するときのパスワードを指定します。
コネクションプール データベースとのコネクションをプールから使用するかどうかを指定します。
TRUE - コネクションプールを使用します
FALSE - コネクションプールを使用しません
テーブル名 検索するテーブル名を指定します。
キーとなるフィールド名 更新を検出するために使用されるTimestamp型のフィールドのフィールド名を指定します。
検索SELECT文 検索するためのSELECT文を指定します。
検索するためのSELECT文は、パイプラインのレコード情報と「テーブル名」「キーとなるフィールド名」から自動的に生成されますが、 その他の条件を追加したい場合には、このプロパティに検索するためのSELECT文を指定します。 SELECT文にはWHERE句を必ず記述し、加えてWHERE句中の条件は $condition$ という文字列をANDで結合するようにしてください。

(例1)WHERE句が特に必要ない場合、WHERE $condition$ のみを付加する

SELECT * FROM test WHERE $condition$ ORDER BY id

(例2)WHERE句に (status = 1 OR status = 2) という条件がある場合、$condition$ をANDで結合する

SELECT * FROM test WHERE $condition$ AND (status = 1 OR status = 2) ORDER BY id
検索SELECT文ファイル 検索するためのSELECT文を格納したテキストファイルのファイルパスを指定します。
SELECT文の記法に関する注意については「検索SELECT文」をご覧ください。
ファイルパスの区切り文字「\」と「/」は区別されません。
相対パスを指定した場合、
[DATA_DIR]/pipeline/home/pipeline/_filerootが起点になります。
このプロパティを指定した場合は、「検索SELECT文」の指定は無視されます。また、検索するためのSELECT文も自動的に生成されません。
スケジュールタイプ 実行スケジュールの種別を指定します。
時間間隔設定 - 指定された間隔で実行します。
曜日設定 - 指定された曜日の指定された時刻に実行します。
取得間隔 実行する間隔を指定します。単位は「時間」「分」「秒」のいずれかで指定します。
スケジュールタイプが「時間間隔設定」の場合にのみ有効です。
スケジュール実行期間 1日のうち実行スケジュールを行う期間を時間で指定します。
スケジュールタイプが「時間間隔設定」の場合にのみ有効です。
開始時に実行する パイプラインの開始時に処理を実行するかどうかを指定します。
スケジュールタイプが「時間間隔設定」の場合にのみ有効です。
チェックボックスがオンの場合、開始時にパイプラインの処理を実行します。その後は「取得間隔」で指定した時間ごとに実行されます。
オフの場合、パイプライン開始後、「取得間隔」で指定した時間が経った後に最初の実行が行われます。
初期値はオフで、開始時に実行しません。
実行曜日 どの曜日に処理を実行するかを指定します。
スケジュールタイプが「曜日設定」の場合にのみ有効です。
実行時間 指定された曜日の何時に処理を実行するかを指定します。
スケジュールタイプが「曜日設定」の場合にのみ有効です。

※細字は詳細設定のときのみ設定できるプロパティです。

■流れるデータ

名前データ型説明
Record.フィールド名指定したデータ型 レコード情報で定義して取り出したフィールドの値。

■エラー処理

エラーコードエラー時説明
A0052-0001 終了 アクションが見つからなかった場合
A0052-0002 終了 コネクションの取得に失敗した場合
A0052-0003 終了 レコード情報が設定されていなかった場合
A0052-0100 終了 JDBCの操作で例外が発生した場合
A0052-0102 終了 検索SELECT文」のWHERE句に $condition$ という文字列が存在しなかった場合
A0052-0103 終了 データベースのシステム日時を取得するためのSQL文が見つからなかった場合
A0052-0104 終了 データベースのシステム日時が取得できなかった場合
A0052-0105 終了 検索SELECT文ファイル」で指定したファイルの読み込みに失敗した場合。
A0052-0101 終了 その他の例外が発生した場合

■更新日時キャッシュデータが初期化されるタイミングについて

レコードの更新を監視するために、パイプラインの実行時にデータベースのシステム日付をキャッシュデータに保存しています。 このキャッシュデータはパイプラインの停止やサーバーの停止では初期化されません。

キャッシュデータは、以下のいずれかの条件を満たす場合に初期化されます。

■レコード更新の監視方法について

レコードの更新の監視は以下のようにして行われます。

  1. 更新日時キャッシュデータから前回の監視日時を取得します。初回実行時や更新日時キャッシュデータが初期化された場合は1970/01/01 00:00:00.000を前回の監視日時とします
  2. SQL文によりデータベースサーバーのシステム日時を取得します
  3. 【 前回の監視日時 】 <= 【 「キーとなるフィールド名」で指定されたフィールド 】 < 【 データベースサーバーのシステム日時 】 を満たすレコードを取り込みます
  4. データベースサーバーのシステム日時を更新日時キャッシュデータに保存します
つまり、前回の監視日時からパイプライン実行時のデータベースサーバーのシステム日時までの間に更新されたレコードが取り込み対象となります。
また、初回実行時や更新日時キャッシュデータが初期化された場合は、前回の監視日時が 1970/01/01 00:00:00.0000 となることに注意して下さい。

■Null値の扱いについて

データベースのNull値をパイプラインの文字型のフィールドへ取り込んだ場合、パイプラインではそのフィールドの値はNullではなく空文字列になります。
パイプラインでは文字型のフィールドに関してはNullと空文字列を区別できませんのでご注意ください。