ai 채팅

트리거

순9 2025. 2. 11. 17:12
728x90

데이터베이스 트리거란?

데이터베이스 트리거는 특정 이벤트에 반응하여 자동으로 실행되는 코드

테이블에 데이터 변경(삽입, 수정, 삭제)과 같은 이벤트가 발생했을 때, 미리 정의된 작업을 수행하도록 설정

자동화된 작업: 특정 이벤트 발생 시 관련 작업을 자동으로 처리하여 업무 효율성

BEGIN
    INSERT INTO public.users (id, name, created_at)
    VALUES (
      NEW.id,
      NEW.raw_user_meta_data ->> 'name', 
      NOW()  
    );

    UPDATE auth.users
    SET raw_user_meta_data = raw_user_meta_data || '{"role": "user"}'::jsonb
    WHERE auth.users.id = NEW.id;

    RETURN NEW;
END;

auth.users 테이블에 새로운 사용자가 삽입될 때 자동으로 실행

 

 

 

  • public.users 테이블에 새 사용자 정보 삽입:
    • INSERT INTO public.users ... : public.users 테이블에 새로운 행을 삽입합니다.
    • NEW.id: 새로 삽입된 auth.users 행의 id 값을 가져와 public.users 테이블의 id 컬럼에 넣습니다. NEW는 트리거가 실행되는 현재 행의 데이터를 참조하는 특별한 변수입니다.
    • NEW.raw_user_meta_data ->> 'name': auth.users 테이블의 raw_user_meta_data 컬럼은 JSONB 형식의 데이터를 저장하고 있습니다. ->> 연산자를 사용하여 JSON 객체에서 'name' 키에 해당하는 값을 추출하여 public.users 테이블의 name 컬럼에 넣습니다. 이것은 auth.users 테이블의 사용자 메타데이터에서 이름을 가져와 public.users 테이블에 저장하는 것을 의미합니다.
    • NOW(): 현재 시각을 public.users 테이블의 created_at 컬럼에 넣습니다.
  • auth.users 테이블의 사용자 메타데이터 업데이트:
    • UPDATE auth.users ...: auth.users 테이블을 업데이트합니다.
    • SET raw_user_meta_data = raw_user_meta_data || '{"role": "user"}'::jsonb: || 연산자는 JSONB 객체를 병합하는 데 사용됩니다. 기존 raw_user_meta_data에 {"role": "user"} JSON 객체를 추가합니다. ::jsonb는 명시적으로 JSONB 타입으로 캐스팅하는 역할을 합니다. 결과적으로, 새로 생성된 사용자의 메타데이터에 "role" 속성을 추가하고 "user" 값을 할당합니다.
    • WHERE auth.users.id = NEW.id: auth.users 테이블에서 id가 새로 삽입된 행의 id와 일치하는 행을 찾아서 업데이트합니다.
  • RETURN NEW;: 트리거 함수는 반드시 RETURN 문을 포함해야 합니다. NEW를 반환함으로써 삽입 작업을 계속 진행하도록 지시합니다.