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 $$
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 개발/디버깅을 편하게 진행할 수 있을 것이다.
'Database > Greenplum' 카테고리의 다른 글
[Greenplum] 6.12.0 버전에서 PANIC 상황을 발생시키는 방법 (0) | 2021.07.15 |
---|---|
RefCursor를 이용하여 Multiple Results(다중 결과 데이터) Function 개발 (0) | 2021.07.07 |
Greenplum 테이블의 분산키를 변경하는 방법 (0) | 2021.04.20 |
Greenplum ETL도구 소개 (0) | 2021.03.14 |
Greenplum 7 RoadMap - 예상기능정리 (0) | 2021.03.05 |