<aside> ✍️ 작성자: 김혜원 작성일: 24.06.15

</aside>

에러 메시지

AuthApiError: Database error saving new user

원인

Supabase Auth Log를 살펴본 결과, gender 칼럼의 타입은 public.gender인데, 해당 칼럼에 INSERT 하려는 데이터의 타입이 text로 인식되어 작업이 완료되지 못했다.

회원가입 시 회원 데이터를 데이터베이스 user 테이블에 INSERT 하는 function을 실행하도록 trigger를 설정해놓았기 때문에 이 INSERT 작업이 실패하여 회원가입도 실패되었다.

해결 방법

gender, birthdate, interests 칼럼은 선택 입력사항(is nullable)으로, 회원가입 시 입력된 데이터가 없으면 NULL value를 insert하도록 COALESCE를 활용한 PostgreSQL 함수를 작성했었다.

하지만 실제로 작동할 때 NULL이 타입 텍스트 ‘NULL’로 인식되어 이와 같은 에러가 발생하는 것 같다.

그래서 뒤에 ::type 으로 어떤 타입인지를 명확히 하여 NULL이 타입 텍스트가 아니라 해당 타입의 NULL 로 인식되도록 함수를 수정했다.

gender 칼럼 value에 ::public.gender 를 붙여 해결하고 나니, 다른 null 값을 가질 수 있는 칼럼들에도 같은 에러가 발생해 모두 타입 처리를 해주었다.

Before

insert into public.user (
    id, username, phone_number, gender, birthdate, interests
  )
  values (
    new.id,
    new.raw_user_meta_data ->> 'username',
    new.raw_user_meta_data ->> 'phone_number',
    COALESCE(new.raw_user_meta_data ->> 'gender', NULL),
    COALESCE(new.raw_user_meta_data ->> 'birthdate', NULL),
    COALESCE(new.raw_user_meta_data ->> 'interests', NULL)
  );
  return new;

After

insert into public.user (
    id, username, phone_number, gender, birthdate, interests
  )
  values (
    new.id,
    new.raw_user_meta_data ->> 'username',
    new.raw_user_meta_data ->> 'phone_number',
    COALESCE(new.raw_user_meta_data ->> 'gender', NULL)::public.gender,
    COALESCE(new.raw_user_meta_data ->> 'birthdate', NULL)::date,
    COALESCE(new.raw_user_meta_data ->> 'interests', NULL)::text[]
  );
  return new;