Develop

[PostgreSQL] 오브젝트 안에서 로그 찍기 - RAISE 사용해서 출력

issuemaker99 2024. 10. 11. 17:00
728x90

1. RAISE 문이란?

RAISE 문은 PostgreSQL에서 메시지를 출력하거나 예외를 발생시키는 데 사용하는 명령어입니다. 주로 함수나 트리거 내부에서 사용되어 디버깅, 에러 처리 또는 경고 메시지 출력을 위해 활용됩니다. RAISE 문은 크게 다음과 같은 형태로 사용할 수 있습니다:

  • NOTICE: 일반적인 정보 메시지를 출력.
  • INFO: 추가 정보를 제공할 때 사용.
  • WARNING: 경고 메시지를 출력.
  • EXCEPTION: 오류를 발생시키고 트랜잭션을 중단.

2. RAISE 사용법

2.1 기본 문법

RAISE 문은 출력하고자 하는 메시지의 유형과 메시지 내용을 지정하는 형태로 사용됩니다. PostgreSQL에서 로그를 찍을 때는 주로 NOTICE INFO를 사용합니다.

RAISE [ NOTICE | INFO | WARNING | EXCEPTION ] '메시지';

 

  • NOTICE: 디버깅 목적으로 주로 사용되는 기본 출력.
  • INFO: 사용자에게 정보를 전달하기 위해 사용.
  • WARNING: 경고 메시지를 출력.
  • EXCEPTION: 오류를 발생시켜 트랜잭션을 중단.

2.2 예제: 함수에서 로그 찍기

다음은 PostgreSQL 함수에서 RAISE 문을 사용하여 로그를 출력하는 간단한 예제입니다.

CREATE OR REPLACE FUNCTION test_raise_function(val integer)
RETURNS void AS $$
BEGIN
    -- 로그를 찍기 위한 NOTICE 출력
    RAISE NOTICE 'Function started with value: %', val;

    -- 값이 10보다 크면 경고 메시지 출력
    IF val > 10 THEN
        RAISE WARNING 'The value is greater than 10: %', val;
    END IF;

    -- 값이 20이면 예외 발생
    IF val = 20 THEN
        RAISE EXCEPTION 'The value is exactly 20, throwing an error!';
    END IF;

    -- 함수 종료 로그
    RAISE NOTICE 'Function finished successfully.';
END;
$$ LANGUAGE plpgsql;

 

설명:

  • RAISE NOTICE: 함수가 시작될 때 인자로 받은 값을 로그로 출력.
  • RAISE WARNING: 값이 10보다 클 경우 경고 메시지를 출력.
  • RAISE EXCEPTION: 값이 20이면 예외를 발생시키고 트랜잭션을 중단.
  • RAISE NOTICE: 함수가 정상적으로 종료되었음을 알리는 메시지 출력.

이 함수는 인자로 받은 val 값에 따라 다른 로그 메시지를 출력하며, 특정 조건에서는 예외를 발생시킵니다.

2.3 함수 호출 및 로그 확인

위에서 만든 함수를 호출하여 실제로 로그가 출력되는지를 확인해보겠습니다.

-- 5를 인자로 함수 호출
SELECT test_raise_function(5);

-- 15를 인자로 함수 호출
SELECT test_raise_function(15);

-- 20을 인자로 함수 호출 (예외 발생)
SELECT test_raise_function(20);

 

출력 결과:

 

1. SELECT test_raise_function(5);

NOTICE:  Function started with value: 5
NOTICE:  Function finished successfully.

 

2. SELECT test_raise_function(15);

NOTICE:  Function started with value: 15
WARNING:  The value is greater than 10: 15
NOTICE:  Function finished successfully.

 

3. SELECT test_raise_function(20);

NOTICE:  Function started with value: 20
ERROR:  The value is exactly 20, throwing an error!

 

이 예제에서 RAISE 문을 사용하여 각기 다른 수준의 로그를 출력하고, 특정 값에서 예외가 발생하는 경우도 확인할 수 있습니다.

 

3. RAISE로 포맷팅된 메시지 출력하기

RAISE 문에서 메시지를 출력할 때, 포맷팅을 통해 변수를 삽입할 수 있습니다. 포맷팅 방식은 C 언어의 printf()와 유사하며, % 기호를 사용하여 변수를 문자열에 삽입합니다.

예제: 여러 변수와 함께 메시지 출력

CREATE OR REPLACE FUNCTION log_with_formatting(val1 integer, val2 text)
RETURNS void AS $$
BEGIN
    RAISE NOTICE 'Logging two variables: val1 = %, val2 = %', val1, val2;
END;
$$ LANGUAGE plpgsql;

 

이 함수는 두 개의 인자 val1 val2를 받아서 이를 로그로 출력합니다.

-- 함수 호출
SELECT log_with_formatting(10, 'Hello');

 

출력 결과:

NOTICE:  Logging two variables: val1 = 10, val2 = Hello

 

이처럼 % 기호를 사용하여 로그 메시지에 변수를 동적으로 삽입할 수 있습니다.

4. RAISE 문으로 디버깅하기

함수나 트리거 작성 시 디버깅을 위해 RAISE 문을 활용하면 코드 흐름을 추적하고 문제를 찾아내는 데 큰 도움이 됩니다. 복잡한 비즈니스 로직을 처리하는 함수 내부에서 중요한 값들을 로그로 출력해가며 문제를 쉽게 파악할 수 있습니다.

예제: 복잡한 로직에서의 디버깅

CREATE OR REPLACE FUNCTION debug_example(val integer)
RETURNS void AS $$
BEGIN
    RAISE NOTICE 'Debugging started, value = %', val;

    IF val < 10 THEN
        RAISE NOTICE 'Value is less than 10';
    ELSE
        RAISE NOTICE 'Value is 10 or more';
    END IF;

    -- 트랜잭션 종료
    RAISE NOTICE 'Debugging completed.';
END;
$$ LANGUAGE plpgsql;

 

5. RAISE 문과 로그 레벨

PostgreSQL에서는 로그 레벨을 조정할 수 있는 설정이 있으며, 각 로그 레벨은 특정 상황에서만 출력됩니다. RAISE 문에서 사용하는 레벨은 NOTICE, INFO, WARNING, EXCEPTION 등이며, 필요한 레벨에 맞춰 메시지를 출력할 수 있습니다. 로그 레벨을 적절히 사용하면, 프로덕션 환경에서 발생하는 문제를 디버깅하거나 사용자가 인식해야 하는 정보를 효율적으로 관리할 수 있습니다.

 

PostgreSQL에서 RAISE 을 사용하면 함수나 트리거 안에서 로그를 찍고, 중요한 정보를 출력하며, 디버깅을 할 수 있습니다. RAISE는 다양한 로그 레벨을 제공하며, 이를 통해 필요한 정보를 적시에 출력할 수 있습니다. 

LIST