PostgreSQL

PostgreSQL: reload

dewstream 2025. 5. 22. 08:00
728x90

※ PostgreSQL: reload.

 

안녕하세요. 듀스트림입니다.

 

오늘은 PostgreSQL에서 설정 파일을 다시 읽도록 요청하는 리로드 명령에 대한 내용입니다.


1. reload

  • 리로드 명령은 PostgreSQL 서버 프로세스에게 SIGHUP 시그널을 보내 설정 파일들을 다시 읽도록 하는 명령입니다.
  • OS CLI 명령어인 pg_ctl reload와 PostgreSQL의 함수인 pg_reload_conf()로 내릴 수 있습니다.

 

+ PostgreSQL 설정 파일

파일명 역할
postgresql.conf 기본 전역 설정
postgresql.auto.conf ALTER SYSTEM으로 생성되는 설정 
pg_hba.conf 접속 인증 설정
pg_ident.conf 클라이언트 인증(매핑)

 

++ PostgreSQL 설정 우선순위 (높은 우선순위 → 낮은 우선순위)

세션 레벨 설정 (SET 명령어) > ALTER ROLE SET > ALTER DATABASE SET > postgresql.auto.conf > postgresql.conf

2. 기존 연결된 세션에 대한 처리

  • 기존 연결된 세션은 종료되지 않고 그대로 유지됩니다.
  • reload는 단순히 설정 파일을 다시 읽는 것일 뿐, 세션을 재시작하거나 커넥션을 끊지 않습니다.
    따라서, 기존 커넥션들은 영향을 받지 않거나 일부 파라미터에 한해서만 영향을 받습니다.

3. pg_ctl reload vs pg_reload_conf() 비교

  • 내부적으로는 동일하게 동작하며, 어떤 명령어를 쓰든 PostgreSQL는 설정 파일을 다시 읽는 것이 전부입니다.
항목 pg_ctl reload pg_reload_conf()
실행 방식 쉘 명령어 (OS 수준) SQL 함수 (DB 내부)
동작 SIGHUP 시그널 전송 SIGHUP 시그널 전송
권한 PostgreSQL OS 사용자 슈퍼유저만 가능
적용 대상 설정 파일 전반 설정 파일 전반
기존 세션 영향 없음 없음
적용 가능한 파라미터 sighup, superuser, user context의 파라미터 sighup, superuser, user context의 파라미터
적용 불가능한 파리미터 postmaster context postmaster context

 

 

postgres/src/backend/utils/misc/guc.c at master · postgres/postgres

Mirror of the official PostgreSQL GIT repository. Note that this is just a *mirror* - we don't work with pull requests on github. To contribute, please see https://wiki.postgresql.org/wiki/Subm...

github.com

 

+ 파라미터명, 컨텍스트 조회 방법

SELECT name, context FROM pg_settings;

 

++ PostgreSQL 컨텍스트의 계층 구조

  • pg_settings.context는 설정 파라미터의 변경 적용 시점을 정의하며, 엄격한 우선순위를 가지며, 다음과 같은 레벨 구조로 구성되어 있습니다.
context 값 설명 reload로 적용 가능 여부
postmaster 서버 시작 시만 적용 (재시작 필요)
sighup 설정 파일 재로딩 시 적용
superuser 슈퍼유저만 세션에서 변경 가능
backend 세션 시작 시만 적용 🔄 일부 가능 (신규 세션부터)
user 일반 유저도 세션 내에서 변경 가능 🔄 일부 가능 (신규 세션부터)

4. ALTER SYSTEM SET과의 관계

ALTER SYSTEM SET 명령 시

  1. postgresql.auto.conf에 값이 저장됩니다.
  2. 기존 postgresql.conf보다 우선순위가 높습니다.
  3. 이 파일은 수동으로 수정하지 않고, PostgreSQL이 자동으로 관리합니다.
  4. 적용하려면 pg_reload_conf() 또는 pg_ctl reload 호출이 필요합니다.

 

예시

-- work_mem 설정
ALTER SYSTEM SET work_mem = '64MB';

-- postgresql.auto.conf에서 work_mem 설정 제거
ALTER SYSTEM RESET work_mem;

 

ALTER SYSTEM SET은 설정값을 postgresql.conf에 저장하는 명령이며, 리로드로 저장된 설정을 반영해야 합니다.

ALTER SYSTEM SET → postgresql.auto.conf 파일 갱신 → pg_reload_conf() 또는 pg_ctl reload → 설정 반영

오늘은 여기까지 ~

 

728x90