archive_command
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | — | sighup | string |
| 15 | — | sighup | string |
| 16 | — | sighup | string |
| 17 | — | sighup | string |
| 18 | — | sighup | string |
| 19 | — | sighup | string |
완료된 WAL segment 파일을 archive하기 위해 실행할 로컬 shell 명령을 지정한다. postgresql.conf나 서버 커맨드라인에서만 설정할 수 있으며, 서버 시작 시 archive_mode가 켜져 있고 archive_library가 빈 문자열일 때만 사용된다. archive_command와 archive_library를 둘 다 설정하면 오류가 발생한다.
명령 문자열의 %p는 archive할 파일의 경로(서버 작업 디렉토리, 즉 데이터 디렉토리 기준 상대 경로)로, %f는 파일 이름으로 치환되며, % 문자 자체는 %%로 쓴다. 중요한 것은 명령이 성공했을 때만 종료 코드 0을 반환해야 한다는 점이다. PostgreSQL은 0을 반환받은 segment를 archive 완료로 간주하므로, 실제로 저장되지 않았는데 0을 반환하면 해당 WAL이 조용히 유실된다.
archive_mode가 켜진 상태에서 archive_command가 빈 문자열(기본값)이면 WAL archiving은 일시적으로 중단되지만, 서버는 곧 명령이 지정될 것으로 보고 WAL segment 파일을 계속 쌓아 둔다. 이 상태를 방치하면 pg_wal 디렉토리가 계속 커진다.
운영 노트:
/bin/true처럼 아무것도 하지 않고 성공만 반환하는 명령을 지정하면 archiving을 사실상 끌 수 있지만, archive recovery에 필요한 WAL 파일 체인이 끊어진다. 특별한 사정이 없는 한 이 방법은 쓰지 않는 것이 좋다.출처: PostgreSQL 18 문서