
[25.02.14 금요일]
가장 큰 고비중 하나였던 트리거!
회원가입할때 기본 email, password는 auth 스키마의 users로 자동으로 저장되지만, public스키마에 설정한 우리의 커스텀 테이블과는 관계형으로 이용하기가 힘들다. 개인정보가 저장되는 부분이기 때문이다.
그래서 public 스키마에 users 테이블을 추가하여 auth.users의 값을 일부 넣어줘야 하는데 생각대로 되지 않아았다.
어제 만든 회원가입 페이지에서 테스트중인데 auth.users에만 값이 저장이 되고 public.users에는 저장이 되지 않아 한참을 찾았다.
강의 도중에 "트리거" 함수를 추가해야 한다고해서 찾아보았는데, ?? 내가 생각한 리액트 함수가 아닌 sql함수였던 것이다.
당황했다. 튜터님들도 구체적으로 알려주지 않고 찾아서 해보라고만 이야기해서.. 일단 진행..20분, 30분... 과제 진행 기간이 짧기 때문에 더이상은 고민하지 못하고 튜터님을 찾아가려했는데!!
다행히도 팀에 DB를 유경험자가 있어서 여기서 진행이 거의 막힐 상황이었는데 구세주 처럼 등장!! 생각보다는 수월하게 해결!
추가하는 트리거에 대해서만 참고용으로 기록
DROP TRIGGER IF EXISTS on_auth_user_created ON auth.users;
DROP FUNCTION IF EXISTS public.handle_new_user;
CREATE FUNCTION public.handle_new_user()
RETURNS TRIGGER AS $$
BEGIN
INSERT INTO public.users(user_id, email, name, nickname, created_at)
VALUES (
NEW.id,
NEW.email,
COALESCE(NEW.raw_user_meta_data->>'name', 'default_name'), -- NULL 방지
COALESCE(NEW.raw_user_meta_data->>'nickname', 'default_nickname'),
NEW.created_at
)
ON CONFLICT (user_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 FUNCTION public.handle_new_user();
테스트해서 정상적으로 자료가 저장이 되는 것을 확인했다.
나중에 이걸 다시 사용하려고 할때 수정해서 사용해봐야지.
그리고 공식문서도 계속 읽어면서 앞으로의 코드를 짜야겠다.
공식문서를 참조하지 않으면 js에서 사용이 매우 힘들겠다 라고 느꼈다.
내일은 공식문서 확인하면서 코딩해보자!!
https://supabase.com/docs/reference/javascript/start?queryGroups=platform&platform=yarn