Closed6

Supabaseにトリガを設定する

smallStallsmallStall

peersテーブルを削除したときにroomsテーブルのmemberカラムを-1するトリガがほしい。

smallStallsmallStall

関数はこんな感じでどうだろう。
JavaScriptに慣れていると、セミコロンが重要な意味を持つことを忘れてしまうので注意しないといけない。

/**
 * roomsテーブルのmemberをへらす
 */
create function public.handle_delete_peer()
  returns trigger as $$
begin
  update public.rooms
  set member = member - 1
  where id = old.rooms_id;
  return old;
end;
$$ language plpgsql security definer;
smallStallsmallStall

トリガーの設定

create trigger on_peer_deleted
  after delete on public.peers
  for each row execute procedure public.handle_delete_peer();
smallStallsmallStall

ついでにroomsのメンバが0以下になったらレコードを削除するようにする。

/**
 * roomがupdateしたときにmemberが0人以下のレコードを削除
 */
create function public.handle_update_room()
  returns trigger as $$
begin
  delete from public.rooms
  where id = old.id and member <= 0;
  return old;
end;
$$ language plpgsql security definer;

create trigger on_room_updated
  after update on public.rooms
  for each row execute procedure public.handle_update_room();
このスクラップは2022/06/05にクローズされました