begin
insert into public.users (id, email, nickname, created_at)
values (
new.id,
new.email,
coalesce(new.raw_user_meta_data->>'user_name', 'default_name'),
now()
)
on conflict (id) do nothing;
return new;
end;
추가 컬럼과 기본값 처리
기존 Eun 함수는 id, email, nickname만 넣었습니다.
새 함수는 created_at까지 함께 채우고, raw_user_meta_data->>'user_name' 값이 없을 때 default_name으로 대체합니다.
이렇게 하면 가입 시각이 기록되고, 닉네임이 비어도 에러 없이 들어갑니다.
중복 삽입 방지
on conflict (id) do nothing을 넣어서 같은 id로 두 번 insert가 시도돼도 에러 없이 무시됩니다.
연결이 끊겼다가 재시도되는 경우나 소셜 로그인 등으로 동일 ID가 다시 들어올 때 안전망이 됩니다.
트리거 실행 환경 보강
실제 SQL에서는 returns trigger, security definer, set search_path = public 등을 설정합니다.
pnpm dlx supabase gen types typescript \
--project-id ... \
--schema public \
> src/types/supabase.ts
위와 같이 테이블 타입 불러오기 가능