0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita全国学生対抗戦Advent Calendar 2023

Day 23

supabaseのデータベースでトリガーファンクションを作る

Last updated at Posted at 2023-12-23

はじめに

supabaseのDBに変更が入った時に、それをトリガーに特定の処理を呼びたかったので調べた

行いたい処理の関数を事前に作る

ここでどういう処理をやりたいかということは人によって様々なので書きませんが
注意事項は以下

  1. DatabaseタブのなかのFunctionsタブからCreate a new functionを押して作る
  2. return typeはtriggerを選ぶ
  3. 一番下のshow advanced settingsを押して、type of securityをSECURITY INVOKERを選んでおく

トリガーファンクションを作る

想像の100倍簡単です。
DatabaseタブのTriggerタブを選んでください。

  1. Name of triggerは適当な値を入力
  2. 「Table」はどこのテーブルの変更を検知するのかを選択
  3. Eventsはどういう変更を検知するのか、Insert, Update, Deleteの中から選択
  4. Trigger typeはeventが完了する前に行うのか、後に行うのかを選択(詳細は後述)
  5. Orientationは、行ごとに実行するのか、処理ごとに実行するのかを選択(詳細は後述)
  6. 最後にどのfunctionを呼ぶのか、要はさっき作ったファンクションを選択して終了

Trigger typeについて

ここちょっと理解しきれていないのですが、自分のイメージとしては以下です。

before eventsにすると、エラーが起きた時に元の処理を止めてくれます。
after eventsにすると、エラーが起きた時に元の処理自体は終了しています。

Orientationについて

Rowにすると一つの行ごとに一回実行、Statementにすると一つの変更ごとに一回実行です。
一行だけの変更を検知するんだったら、どっちでも変わりないですね。
ただ、複数行を一つのSQL分で変更するんだったら、Statementにしたらよりパフォーマンスよく実行できるようです。

終了

上記で作れるはずです。
ただ、実際にやってみると動かなかったりするのでそしたら
LogsタブのTemplateとかから適当なログ出しのテンプレを選択して、ログをみてみましょう。
なんかしらのエラーが出ているはずです。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?