Heroku Connect トリガーログ
最終更新日 2022年12月08日(木)
Table of Contents
Heroku Postgres のレコードに加えられた変更はトリガーログに捕捉されます。Heroku Connect では、トリガーログを使用してデータを Salesforce に送信します。この記事は、トリガーログのしくみとその読み方について理解するために役立ちます。
概要
トリガーログは、Heroku Connect アドオン用に設定されたスキーマの 2 つのテーブルに格納されます。新しい変更は、Connect によって _trigger_log
テーブルに捕捉されます。処理されたレコードは _trigger_log
テーブルから _trigger_log_archive
に移動します。
捕捉されたすべての読み取り/書き込みの変更は、Heroku Connect によって、アドオンごとに 1 つのプロセスで処理され、Salesforce に送信されます。個々のトリガーログエントリは、Heroku Connect による処理が済んだかどうかを状態で示しています。トリガーログには読み取り専用マッピングの変更も捕捉されますが、Heroku Connect ではこれらの変更に対しては何も行いません。
マッピングを読み取り/書き込みから読み取り専用に変更しても、すでに捕捉された変更については Salesforce への送信を防ぐことはできません。
捕捉された変更
マップされた読み取り/書き込みテーブルで INSERT が発生すると、すべての列が捕捉されます。Salesforce への INSERT が成功した後、Connect は新しく作成されたレコードの sfid
を捕捉して、Postgres 内の起点のテーブルに書き戻します。
マップされた読み取り/書き込みテーブルで UPDATE が発生すると、トリガーは変更の前後で行の値を比較します。変更された値のみを記録します。
DELETE 操作は削除のみを記録します。
マップされた読み取り/書き込みテーブルで TRUNCATE 操作が発生した場合、レコードは Salesforce で削除されません。マップされたテーブルのトリガーは、INSERT、UPDATE、DELETE の各操作にのみ適用されます。TRUNCATE 操作は _trigger_log
テーブルに捕捉されません。ご自身で個別に Salesforce のレコードを削除してください。
Connect はトランザクション境界内の変更を監視できず、データベースで発生したとおりの厳密な書き込み順序を強制することはできません。
トリガーログへのアクセス
heroku pg:psql
を使用して、データベースの _trigger_log
テーブルを表示できます。
SELECT table_name, record_id, action, sf_message
FROM salesforce._trigger_log;
トリガーログの保持
デモ版の Heroku Connect アドオンプランでは、変更を _trigger_log_archive
テーブルに 7 日間保持する一方で、有料アドオンでは変更を 30 日間アーカイブに保持します。30 日を過ぎた変更は Connect によって自動的にパージされます。
テーブルの構造
_trigger_log
テーブルと _trigger_log_archive
テーブルの構造はどちらも同じです。
列 | 型 | 目的 |
---|---|---|
id | 整数 | テーブルのプライマリキー。変更の順序の決定にも使用されます。 |
created_at | タイムスタンプ | 変更が捕捉された日時 |
updated_at | タイムスタンプ | Heroku Connect によってエントリが変更された日時 |
processed_at | タイムスタンプ | Heroku Connect がエントリの処理を終了した日時 |
table_name | varchar(128) | 変更の捕捉元のテーブル |
record_id | 整数 | 変更が捕捉されたレコードの id |
sfid | varchar(18) | 捕捉された変更の Salesforce ID (該当する場合) |
action | varchar(7) | 捕捉された操作: INSERT、UPDATE または DELETE |
state | varchar(8) | レコードの現在の状態 (参照: 状態) |
values | テキスト | 変更に関して捕捉された hstore でエンコードされた列の値 |
sf_message | テキスト | 書き込み中にエラーが発生したときに Salesforce から返されたエラーメッセージ(参照: Heroku Connect の書き込みエラー) |
old | テキスト | 変更前に捕捉された古い値 (hstore 形式でエンコード) |
状態
トリガーログは、各エントリの状態を state
フィールドで追跡します。各エントリの終了状態は SUCCESS、MERGED、IGNORED、FAILED、READONLY のいずれかです。さらに、このエントリは NEW、PENDING、IGNORE、BULKSENT の各状態を経過する場合があります。
状態 | 説明 |
---|---|
SUCCESS | 行は Salesforce に正常に書き込まれました。 |
MERGED | これは、マージ書き込みアルゴリズム にのみ適用されます。1 つのポーリング間隔内で 1 行に複数の変更が加えられました。すべての変更は、Connect によって Salesforce に対する 1 つの API リクエストにマージされます。 |
IGNORED | Connect は Salesforce にレコードを書き込もうとしませんでした。この状態は、レコードを更新するが、Salesforce に再同期されるデータ (マップされていないフィールド) を実際には変更しない場合に発生する可能性があります。 |
FAILED | Connect はレコードを書き込もうとしましたが、失敗しました。sf_message 列に説明が含まれています。 |
READONLY | 読み取り専用テーブルから捕捉された変更です。Connect ではこれらの変更に対して何も行われません。 |
NEW | 新しく捕捉された変更を処理する準備ができています。 |
IGNORE | Salesforce に再同期される、新しく捕捉された変更 (マップされていないフィールド) です。 |
PENDING | この変更は Connect によって処理中です。 |
BULKSENT | 一括書き込みが進行中ですが、まだ完了していません。 |
トリガーログのトラブルシューティング
トリガーログは、書き込みエラーのトラブルシューティングに役立ちます。詳細は、「Heroku Connect の書き込みエラー」を参照してください。