본문 바로가기

Database/Greenplum

[Greenplum] Function 개발 및 디버깅을 위한 RAISE 로깅 사용방법

728x90
반응형

 

Greenplum Function 을 개발하다보면 실행이력/에러내역등 로그를 남겨 확인해야 할 상황이 있을 것이다.

이럴때 사용하는 것이 RAISE 구문이며 DBeaver Tool을 사용하면 Output 창에 로그내용을 표시할 수 있어 Function 개발/디버깅이 용이하다.

그리고 리눅스 CLI 환경에서 psql 을 이용하여 Function 을 실행하면 표준출력으로 RAISE 구문의 내용이 표시되기 때문에 터미널 환경에서로 상황을 파악할 있다. (물론 Function 내에서 개발을 정상적으로 하였을때 상황이다.)

 

로그 레벨 정의 및 구문 참조 : https://www.postgresql.org/docs/9.4/plpgsql-errors-and-messages.html

 

0. 환경정보

  • Greenplum 6.12.0
  • DBeaver 21.1.0

 

1. DO 구문으로 여러유형의 로그레벨 출력

DO $$
BEGIN
    RAISE DEBUG 'INFO 로그 : %', current_timestamp;
    RAISE LOG 'LOG 로그 : %', current_timestamp;
    RAISE INFO 'INFO 로그 : %', current_timestamp;
    RAISE NOTICE 'NOTICE 로그 : %', current_timestamp;
    RAISE WARNING 'WARNING 로그 : %', current_timestamp;
END $$

 

[DBeaver] Output 출력

 

2. client_min_messages 파라미터

client_min_messages 공식설명 - https://gpdb.docs.pivotal.io/6-16/ref_guide/config_params/guc-list.html#client_min_messages

 

클라이언트 측에서 최소로 출력되는 로그레벨을 지정하는 설정 파라미터 값이며 기본값은 NOTICE 이다.

-- SHOW 명령어로 파라미터값을 조회할 수 있다.
SHOW client_min_messages

 

client_min_messages 파라미터 값이 notice 으로 설정되어 있어 1번의 DO 구문실행시 NOTICE 로그와 NOTICE의 상위레벨인 WARNING 로그가 표시가 된것이다.

 

하지만 당황스럽게도 RAISE INFO 도 표시가 되는데 Greenplum 사이트에서 확인해 보니 RAISE INFO는 무조건 표시되는 로그라는 것을 확인할 수 있다.

INFO level messages are always sent to the client.

 

3. client_min_messages 변경

client_min_messages 을 warning 으로 변경하여 쿼리를 실행하면 WARNING 로그만 표시되는 것을 확인할 수 있다.

-- 로그레벨을 warning로 변경
SET client_min_messages = 'warning'

 

4. Function 개발시 RAISE 사용 개발팁

RAISE INFO Function 실행시 무조건 표시가 되어야 할때 사용
  - Function 이 실행되었다는 것을 표시할때 사용
  - 파라미터의 값을 표시할때 사용
  - Function 내 여러개의 쿼리가 있을 경우 위치를 표시하여 주는 용도로 사용
RAISE NOTICE Temp Table을 생성하거나 Analyze, Vacuum 같이 관리를 위한 구문실행시 사용
추후 문제가 생기는 상황을 예측할 수 있을때 공지하는 용도로 사용
RAISE WARNING Function 실행이 특정조건 때문에 더 이상 진행되지 않을때 사용하여 정확한 경고를 주는 경우에 사용
  - 참조하는 테이블에 데이터가 없거나 데이터를 생성할 수가 없는 상황을 알려주는 용도로 사용
  - 파라미터의 값이 허용하는 조건에 맞지 않아 Function 을 진행할 수 없을때 사용

아주 개인적인 개발팁이며 상황에 맞게 사용하면 Function 개발/디버깅을 편하게 진행할 수 있을 것이다.

 

728x90
반응형