はじめに
supabaseのDBに変更が入った時に、それをトリガーに特定の処理を呼びたかったので調べた
行いたい処理の関数を事前に作る
ここでどういう処理をやりたいかということは人によって様々なので書きませんが
注意事項は以下
- DatabaseタブのなかのFunctionsタブからCreate a new functionを押して作る
- return typeはtriggerを選ぶ
- 一番下のshow advanced settingsを押して、type of securityをSECURITY INVOKERを選んでおく
トリガーファンクションを作る
想像の100倍簡単です。
DatabaseタブのTriggerタブを選んでください。
- Name of triggerは適当な値を入力
- 「Table」はどこのテーブルの変更を検知するのかを選択
- Eventsはどういう変更を検知するのか、Insert, Update, Deleteの中から選択
- Trigger typeはeventが完了する前に行うのか、後に行うのかを選択(詳細は後述)
- Orientationは、行ごとに実行するのか、処理ごとに実行するのかを選択(詳細は後述)
- 最後にどのfunctionを呼ぶのか、要はさっき作ったファンクションを選択して終了
Trigger typeについて
ここちょっと理解しきれていないのですが、自分のイメージとしては以下です。
before eventsにすると、エラーが起きた時に元の処理を止めてくれます。
after eventsにすると、エラーが起きた時に元の処理自体は終了しています。
Orientationについて
Rowにすると一つの行ごとに一回実行、Statementにすると一つの変更ごとに一回実行です。
一行だけの変更を検知するんだったら、どっちでも変わりないですね。
ただ、複数行を一つのSQL分で変更するんだったら、Statementにしたらよりパフォーマンスよく実行できるようです。
終了
上記で作れるはずです。
ただ、実際にやってみると動かなかったりするのでそしたら
LogsタブのTemplateとかから適当なログ出しのテンプレを選択して、ログをみてみましょう。
なんかしらのエラーが出ているはずです。