DB프로그래밍

[PostgreSQL] PostgreSQL에서 현재 적용된 설정 정보를 쿼리로 확인하는 방법

PostgreSQL에서 현재 적용된 설정 정보를 쿼리로 확인하는 방법은 크게 SHOW 명령어, 내장 함수(current_setting), 그리고 시스템 뷰(pg_settings) 조회 등 세 가지로 나뉩니다.


1. SHOW 명령어 (가장 직관적인 방법)

단일 파라미터의 값을 빠르게 확인하거나 전체 설정 목록을 볼 때 사용합니다.

  • 전체 설정 확인: 현재 세션에 적용된 모든 설정 파라미터와 값을 출력합니다.
SHOW ALL;
  • 특정 설정 확인: SHOW [파라미터명]; 형태로 원하는 항목만 조회합니다.
SHOW work_mem;
SHOW shared_buffers;
SHOW max_connections;
SHOW timezone;
SHOW server_version;
SHOW data_directory;


2. pg_settings 시스템 뷰 조회 (가장 상세한 정보 확인)

단순 값뿐만 아니라 기본값(boot_val), 단위(unit), 설정 적용 시 재시작 필요 여부(context), 설정 파일 위치(sourcefile) 등 메타데이터까지 한눈에 볼 수 있습니다. WHERE 절로 필터링하기 좋습니다.

  • 전체 설정 상세 조회
SELECT name, setting, unit, category, short_desc, context, source 
FROM pg_settings;
  • 특정 키워드로 설정 검색 (예: 메모리 관련 설정):
SELECT name, setting, unit, short_desc 
FROM pg_settings 
WHERE name LIKE '%mem%' OR name LIKE '%buffer%';
  • 기본값에서 변경된 설정만 조회 (튜닝 내역 확인 시 유용):
SELECT name, setting, unit, boot_val, reset_val, source, sourcefile
FROM pg_settings 
WHERE setting <> boot_val;

(참고: context 컬럼 값이 postmaster면 DB 재시작이 필요하고, sighup이면 설정 리로드(pg_reload_conf())만으로 반영되는 항목입니다.)


3. current_setting() 함수 사용

쿼리 결과값으로 설정을 가져와 다른 SQL 문이나 조건식 내부에서 활용할 때 유용합니다.

  • 특정 파라미터 값 반환:
SELECT current_setting('work_mem');
SELECT current_setting('max_connections');

  • 존재하지 않는 파라미터 조회 시 에러 방지 (두 번째 인자에 true 전달):
SELECT current_setting('custom.my_setting', true); -- 없으면 에러 대신 NULL 반환

4. 설정 파일(postgresql.conf) 직접 수정 내역 확인

ALTER SYSTEM 명령어로 변경되어 postgresql.auto.conf에 기록된 설정만 따로 확인할 수도 있습니다.

sql

SELECT name, setting, sourcefile, sourceline 
FROM pg_file_settings;

코드를 사용할 때는 주의가 필요합니다.


💡 자주 확인하는 주요 성능/운영 파라미터 예시

SHOW 명령어나 pg_settings에서 주로 확인하는 핵심 항목들입니다.

분류주요 파라미터명설명
메모리shared_buffers, work_mem, maintenance_work_mem, effective_cache_size캐시 및 정렬/해시 작업 메모리 크기
연결max_connections, superuser_reserved_connections최대 동시 접속 수
WAL/체크포인트wal_level, max_wal_size, checkpoint_timeout트랜잭션 로그 및 복구/복제 관련
로깅/모니터링log_min_duration_statement, log_statement, shared_preload_libraries슬로우 쿼리 로깅 및 확장 모듈
경로/기타data_directory, config_file, hba_file, TimeZone데이터 및 설정 파일 실제 경로

pg_settings의 context 컬럼은 해당 설정을 변경할 수 있는 시점과 권한 수준을 나타냅니다.


context 컬럼의 7가지 값 정리

context 값반영 시점 및 조건변경 가능 권한대표 파라미터 예시
internal변경 불가. 컴파일 시점이나 initdb(DB 클러스터 초기화) 단계에서 고정되는 읽기 전용 값입니다.변경 불가block_size, data_checksums, server_version
postmasterDB 서버 재시작 필요. postgresql.conf 수정 후 PostgreSQL 서비스를 재기동해야 반영됩니다.슈퍼유저 (OS/DB)shared_buffers, max_connections, port, wal_level
sighup설정 리로드(pg_reload_conf())로 즉시 반영. 재시작 없이 전체 세션에 적용됩니다. (기존 세션은 다음 트랜잭션이나 쿼리부터 반영됨)슈퍼유저autovacuum, checkpoint_timeout, max_wal_size, log_destination
superuser-backend새 세션부터 반영. 설정 파일 수정 및 리로드 후, 새로 연결되는 세션에만 적용됩니다. (기존 세션은 재접속 필요)슈퍼유저log_connections, log_disconnections, ignore_system_indexes
backend새 세션부터 반영. superuser-backend와 동일하지만, 일반 유저도 접속 시점에 옵션으로 지정할 수 있습니다.일반 유저 (접속 시)local_preload_libraries
superuser세션 단위 즉시 변경 가능. 슈퍼유저 권한으로 SET 명령어를 사용해 현재 세션에만 즉시 적용할 수 있습니다. (파일 수정 시 리로드로 전체 반영)슈퍼유저log_min_duration_statement, log_statement, session_replication_role
user세션 단위 즉시 변경 가능. 일반 유저도 SET 명령어를 통해 본인 세션의 값을 자유롭게 바꿀 수 있습니다.일반 유저work_mem, statement_timeout, TimeZone, search_path, enable_seqscan

실무 활용 팁

  • 쿼리 튜닝 테스트 시 (user, superuser):
    전체 DB 설정을 바꾸기 전에, 현재 내 세션에서만 SET work_mem = '256MB'; 처럼 값을 변경한 뒤 EXPLAIN ANALYZE로 실행 계획 변화를 안전하게 테스트할 수 있습니다.
  • context별 파라미터 분포 확인 쿼리:sqlSELECT context, count(*) FROM pg_settings GROUP BY context ORDER BY count(*) DESC; 코드를 사용할 때는 주의가 필요합니다.

Hi, I’m 관리자