시작하기무료로 시작하기

컨텍스트 스택 캡처하기

다른 언어의 스택 트레이스와 비슷한 스택 컨텍스트를 가져오면, 복잡하고 중첩된 함수를 디버깅하는 데 큰 도움이 됩니다.

아래 코드에서, 스택 컨텍스트를 캡처해 두 개의 중첩 블록 각각의 예외 처리기에서 기록하려고 합니다. 그런 다음 errors 테이블에서 출력 결과를 확인해, 이 함수에서 예외가 발생하는 원인을 디버깅하는 데 활용하세요.

이 연습은 강의의 일부입니다

PostgreSQL에서의 트랜잭션과 오류 처리

강의 보기

연습 안내

  • 스택 컨텍스트를 담을 text 변수 exc_context를 선언하세요.
  • 첫 번째 핸들러에서 PG_EXCEPTION_CONTEXTexc_context 변수에 저장하세요.
  • 두 번째 핸들러에서 PG_EXCEPTION_DETAILexc_detail 변수에 저장하세요.
  • 두 블록 모두에서 오류 메시지와 스택 컨텍스트를 함께 기록하세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

DO $$
DECLARE
   exc_message text;
   exc_details text;
   -- Declare a variable, exc_context to hold the exception context
   ___ ___;
BEGIN
    BEGIN
    	INSERT INTO patients (a1c, glucose, fasting) values (5.6, 93, TRUE),
        	(6.3, 111, TRUE),(4.7, 65, TRUE);
    EXCEPTION
        WHEN others THEN
        -- Store the exception context in exc_context
        GET STACKED DIAGNOSTICS exc_message = MESSAGE_TEXT,
                                ___ = ___;
        -- Record both the msg and the context
        INSERT INTO errors (msg, context) 
           VALUES (___, ___);
    END;
	BEGIN
    	UPDATE patients set fasting = 'true' where id=1;
    EXCEPTION
        WHEN others THEN
        -- Store the exception detail in exc_details
        GET STACKED DIAGNOSTICS exc_message = MESSAGE_TEXT,
                                ___ = ___;
        INSERT INTO errors (___, ___) 
           VALUES (exc_message, exc_context);
    END;
END$$;
SELECT * FROM errors;
코드 편집 및 실행