← Blog

June 5, 2026

What I learned: 2026/06/05

What I did:

  • Implement sign in/out on ClipVocab (English learning app that I've been building)
  • LeetCode 875 & looked back at backtrack problems
  • Read an article about RAG

What I learned:

  • supabase database trigger:

    • 特定のテーブルに対するinsert/update/delete等の操作が発生した時に自動で実行されるDB内の関数
    • Postgres(supabaseのDB)上で定義
    • トリガー操作を発生させたSQLのトランザクション内で実行されるため、原子性がある
    • BEFORE/AFTER:
      • BEFORE: 変更が確定する前に実行(値の加工やバリデーション向け)
      • AFTER: 変更の後に実行(別テーブルへの挿入など)
    • 注意点:
      • trigger内で外部サービス呼び出しを行うのは避ける(トランザクションが長時間ブロックされるため)→外部連携が必要な場合はAPI Routesの方が安全
    • 権限設定: - triggerに 'security definer' を使うと権限をつけて実行できる
    • idempotency:
      • 重複挿入を防ぐには 'ON CONFLICT' を使う(例: ON CONFLICT (id) DO NOTHING)
    • example code
      create or replace function public.handle_auth_user_created()
      returns trigger as $$
      begin
      insert into public.users (id, email, created_at)
      values (new.id, new.email, now())
      on conflict (id) do nothing;
      return new;
      end;
      $$ language plpgsql security definer;
    
      create trigger on_auth_user_created
      after insert on auth.users
      for each row
      execute procedure public.handle_auth_user_created();