← 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();