前書き
~Heroku Connect ちゃんと使えば めちゃ便利 だけどときどき 落とし穴あり~
自分用に取っていたメモを編集・公開します。
今後も何かあれば未来の自分が追記していくはずです。
だいたい↑に書いてあることです。
基本的なこと
Connect設定されたTable(オブジェクト)のすべてのレコードが同期される
条件を満たすレコードのみの同期等、レコードの絞り込みはできません。
Postgres側にだけ存在するカラムを作ることはできない
Salesforceオブジェクトの項目一覧から同期が必要なものを選択していく方式。
設計・導入・設定時
Heroku Connectのunique identifierとして自動採番のIDを使用しない
SalesforceのオブジェクトID, Postgres側のIDとは別にUniqueな項目を用意する必要があります。
Reloadされたタイミングで採番がずれてしまうため、アプリ側のレコード判別値としても絶対に使用しないように。
親レコードの項目を参照した「数式」項目は、親に変更があっても自動で同期されない
親レコードを参照しない別の項目に更新があったタイミングで反映されます。
Salesforce側でオブジェクト定義を変更した後はHerokuConnct側も再設定が必要
オブジェクト定義の変更は自動的には反映されない。データ型やmax_length等、項目の定義を変更した場合は同期設定のConnect項目から一旦削除・再設定を行う必要があります。
項目の削除時も同じく、同期設定から削除する必要あり。
Postgres → Salesforceの同期に失敗した場合、自動でリトライ等は行われない
エラーの検知を実装して適宜対応していくのがベターかと思います。
Postgres → Salesforceの更新は全てtrriger_log
テーブルに残っており、同期の失敗は state === 'False'
の条件で抽出可能。
trigger_log
の内容は一定期間でtrigger_log_archive
に移動、30日後には消滅するため注意。
同期エラーへの対応
長くなりそうなので別記事にまとめます。
テスト環境等でSalesforceのSandboxと繋ぐ場合
Sandboxにリロードがあった場合、Connectの再設定が必要になります。
に手順が書かれているんですが、サラッとAdd-onをDestroyしているため注意が必要です。
Add-onの再追加後はプランの再設定を忘れないようにしましょう。