27.1. 아카이브 복구 설정

restore_command (문자열)

복구 과정에서 사용할 WAL 세그먼트 파일들을 서버에 적용시킬 시스템 명령이다. 아카이브 모드 복구 작업을 하는 경우에 이 매개변수는 반드시 지정해야 한다. 스트리밍 리플리케이션 대기 서버를 구축하는 경우라면, 이 설정이 꼭 필요한 것은 아니지만, 마스터 서버와의 통신이 끊겨서 수동으로 트랜잭션 로그를 반영해야하는 경우를 대비해서 설정해 두는 것이 좋다. %f 예약어는 적용 할 WAL 파일 이름으로, %p 예약어는 서버에서 사용할 WAL 파일 경로로 사용된다. (상대 경로를 사용하면, 서버를 실행하는 현재 디렉토리를 기준으로 처리된다.) %r 예약어는 마지막 실행 가능한 위치 정보를 나타내는 이름으로 처리된다. %r 예약어는 warm-standby 설정에서만 사용된다. (26.2절 참조). % 문자를 사용하려면, %% 를 사용한다.

여기서 중요한 사항은 여기서 지정한 작업이 성공했을 경우에는 반드시 그 명령의 리턴값이 0(zero)이어야 하며, 실패했을 경우에는 0이 아니여야한다. 서버가 이 명령을 통해 보관하고 있지 않는 파일을 사용하려고 할 때, 이 명령은 반드시 리턴 값으로 0 아닌 값으로 종료되어야한다. 다음은 일반적인 사례다:

restore_command = 'cp /mnt/server/archivedir/%f "%p"'
restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"'  # Windows

archive_cleanup_command (문자열)

이 설정은 선택 항목이다. 여기서 지정한 명령은 warm-standby 서버가 중지 되었다가 다시 실행 될 때 사용된다. 이미 대기 서버에 반영 되어 더 이상 쓸모 없는 WAL 세그먼트 파일들을 찾아서 지우는 일을 할 수 있도록 지정한다. 이렇게 해서, 대기 서버가 빠르게 대기 상황이 될 수 있도록 한다. 이 때 주의할 점은 대기 서버가 여러 대가 있을 경우, 그 서버들이 같은 백업 WAL 파일을 사용할 경우, 이 명령이 실행되어 미처 반영되지 못한 파일이 지워지는 경우를 막아야한다. %r 예약어는 최종 반영된 위치로 처리된다. 즉, %r 이름보다 이전 파일들은 지워도 되지만, 그 이후 파일들은 지우지 말아야한다. 이 작업을 쉽게 하기 위해 이 설정값에는 일반적으로 pg_archivecleanup 확장 모듈로 설치되는 명령을 사용한다. (이 명령은 파일을 지우는 작업을 하기 때문에 단독 대기 서버 환경일 경우에만 사용하는 것이 좋다.) 사용법은 다음과 같다:

archive_cleanup_command = 'pg_archivecleanup /mnt/server/archivedir %r'

다중 대기 서버 환경이라면, 이 WAL 정리 작업은 좀 더 복잡해지는데, 이 부분은 관리자에게 맡긴다. 이 설정값은 warm-standby 서버 구축 환경에서만 사용된다. (26.2절 참조). % 문자를 사용하려면, %%를 사용한다.

이 명령이 0 아닌 값을 리턴값으로 종료되면, 서버 로그에 WARNING으로 기록된다.

recovery_end_command (문자열)

복구 작업이 완료되면 딱 한 번 여기서 지정한 명령이 실행된다. 이 설정값도 선택적으로 지정할 수 있다. 여기서 지정한 명령은 아카이브 모드 백업을 이용한 운영 서버 복구 때나, 대기 서버가 운영 서버로 바뀌는 시점이나, 스트리밍 리플리케이션 서버에서 마스터 서버와의 스트리밍 통신이 끊겨, 백업 파일을 다시 참조해서 모두 반영 했는 경우에 실행된다. %r 예약어는 마지막 반영된 위치이다. 이것은 archive_cleanup_command 명령에서 사용된다.

이 작업이 0 아닌 값으로 종료되면, 데이터베이스 서버 로그에 WARNING 레벨로 오류 메시지가 기록되며, 서버는 가동된다. 하지만, 이 작업 도중 명령어가 시그널을 받아서 종료되는 경우는 데이터베이스 서버는 가동 되지 않는다.