pg_receivewal

pg_receivewal — PostgreSQL 서버에서 흘려보내는 미리-쓰기 로그를 받음

요약

pg_receivewal [옵션...]

설명

pg_receivewal 명령은 실행 중인 PostgreSQL 클러스터의 미리-쓰기 로그를 흘려보내는 일(stream)을 한다. 미리-쓰기 로그는 스트리밍 복제 프로토콜을 사용해서 흘러가서, 로컬 디스크에 파일로 저장될 수 있다. 이 파일이 저장되는 디렉터리는 시점 복원 작업 (25.3절 참조)에서 사용할 아카이브 위치로 사용할 수 있다.

pg_receivewal 명령을 통해서 받는 미리-쓰기 로그는 운영 서버에서 만드는 것을 그대로 실시간으로 전해주는 로그다. 이와 달리 archive_command 설정으로 지정해서 생기는 아카이브 조각은 로그 바꾸기 작업을 통해서만 만들어진다. 이렇기 때문에, pg_receivewal 명령을 사용해서 미리-쓰기 로그를 따로 보관(아카이빙)하는 경우는 archive_timeout 설정이 필요 없다.

PostgreSQL 대기 서버에서 사용하는 WAL 수신기와 달리, pg_receivewal 명령으로 기록하는 WAL 자료는 그 파일이 닫길 때만 디스크 동기화(flush)를 한다. 이 특성이 기본값이며, 트랜잭션 단위로 그 때 그 때 디스크 동기화를 하려면, --synchronous 옵션을 사용해야 한다. Since pg_receivewal does not apply WAL, you should not allow it to become a synchronous standby when synchronous_commit equals remote_apply. If it does, it will appear to be a standby that never catches up, and will cause transaction commits to block. To avoid this, you should either configure an appropriate value for synchronous_standby_names, or specify application_name for pg_receivewal that does not match it, or change the value of synchronous_commit to something other than remote_apply.

미리-쓰기 로그는 PostgreSQL 일반 연결로 접속하고, 복제 프로토콜을 사용한다. 접속 권한은 슈퍼유저이거나, REPLICATION 롤 권한이 있는 사용자이거나 슈퍼유저여야 한다(21.2절 참조). 또한 pg_hba.conf 파일에 해당 접속에 대한 복제 연결 설정이 되어 있어야 한다. 또한 그 운영 서버에서는 max_wal_senders 설정 값이 해당 세션이 충분히 접속할 수 있도록 넉넉한 값이여야 한다.

접속이 끊기거나, fatal 오류는 없지만 연결 초기화 작업을 실패한다면, pg_receivewal 명령은 작업을 정상적으로 할 수 있을 때까지 계속 해당 작업을 재시도한다. 이 작업 방식을 사용하지 않으려면, -n 옵션을 지정해야 한다.

In the absence of fatal errors, pg_receivewal will run until terminated by the SIGINT signal (Control+C).

옵션

-D 디렉터리
--directory=디렉터리

전달 받은 미리-쓰기 로그 조각 파일을 저장할 위치.

이 옵션은 반드시 사용해야 한다.

-E lsn
--endpos=lsn

Automatically stop replication and exit with normal exit status 0 when receiving reaches the specified LSN.

If there is a record with LSN exactly equal to lsn, the record will be processed.

--if-not-exists

--create-slot 옵션을 사용했는데, 그 슬롯이 이미 있는 경우에도 오류로 처리하지 않는다.

-n
--no-loop

접속 장애가 있는 경우가 재시도를 하지 않고, 오류를 반환하고 마친다.

--no-sync

This option causes pg_receivewal to not force WAL data to be flushed to disk. This is faster, but means that a subsequent operating system crash can leave the WAL segments corrupt. Generally, this option is useful for testing but should not be used when doing WAL archiving on a production deployment.

This option is incompatible with --synchronous.

-s 간격초
--status-interval=간격초

지정한 초 간격으로 상태 패킷을 서버로 보낸다. 이 간격으로 보낸 상태 값은 진행 상황을 쉽게 확인 할 수 있도록 한다. 이 값을 0으로 지정하면 주기적인 상태 패킷 보내지는 않지만, 대기시간 초과로 연결이 끊기는 문제를 피하기 위해서 이 상태 패킷을 여전히 보내기는 한다. 이 설정의 기본값은 10 초다.

-S 슬롯이름
--slot=슬롯이름

pg_receivewal 명령에서 사용할 복제 슬롯 이름을 지정한다(26.2.6절 참조). 이 옵션을 사용하면, pg_receivewal 명령은 서버에 플러시 위치를 알린다. 또한 어느 조각이 디스크 동기화를 다 했는지도 알려, 서버에서 더 이상 필요없는 WAL 조각 파일을 지우도록 한다.

pg_receivewal 명령을 사용해서 대기 서버를 구축하는 경우 WAL 플러시 위치를 서버에 알려주는데, 이 작업은 해당 WAL 파일이 닫겼을 경우에만 한다. 이러면, 작업량이 많은 하나의 트랜잭션인 경우 안정성이 떨어진다. 이 경우 --synchronous (아래 참조) 옵션을 사용해서 안정성을 높일 수 있다.

--synchronous

WAL 자료를 받는 즉시 디스크에 쓰기및 동기화(flush)를 하고, 서버쪽으로 현재 작업 상태를 보낸다. 이 옵션을 사용하는 경우, --status-interval 시간 간격 설정은 무시 된다.

또한 이 옵션은 대기 서버 복제가 동기식으로 진행하도록 서버에 지정했다면, pg_receivewal 명령을 사용할 때 이 옵션을 지정해서 모든 작업에 대해서 즉시 응답하도록 해야 한다.

-v
--verbose

작업 내역을 자세히 출력한다.

-Z 수준
--compress=수준

저장할 미리-쓰기 로그의 압축 수준을 지정한다. 0 압축 안함, 9 최대로 압축 함. 이 옵션을 사용하면, 저장되는 파일이름에 자동으로 .gz 확장자가 붙는다.

다음은 데이터베이스 서버 접속 옵션들이다:

-d 연결문자열
--dbname=연결문자열

Specifies parameters used to connect to the server, as a connection string; these will override any conflicting command line options.

--dbname 옵션은 다른 응용 프로그램의 옵션 이름과 일관성을 유지하기 위해서 있으나, pg_receivewal 명령은 다른 응용 프로그램과 달리 여기서 지정한 데이터베이스로 접속하지 않기 때문에 여기서 지정한 데이터베이스 이름은 무시된다.

-h 호스트
--host=호스트

접속할 서버의 호스트 이름. 이 이름이 슬래시 문자로 시작하면, 유닉스 도메인 소켓 파일이 있는 디렉터리로 간주해서 그 디렉터리 안에 있는 유닉스 도메인 소켓 파일로 접속한다. 기본값은 PGHOST 환경 변수 값을 사용하며, 이 값이 없는 경우 유닉스 도메인 소켓 접속을 시도한다.

-p 포트
--port=포트

접속할 서버의 TCP 포트나, 로컬 유닉스 도메인 소켓 파일의 포트 번호. 기본값은 PGPORT 환경 설정 변수 값이나, 컴파일 때 지정한 기본값을 사용한다.

-U 사용자이름
--username=사용자이름

접속할 사용자 이름.

-w
--no-password

비밀번호 입력이 필요한 경우에도 비밀번호를 묻지 않는다. 이 경우 입력해야할 비밀번호는 .pgpass 파일에 지정한 것을 사용한다. 비밀번호 입력을 받지 않음으로 접속하지 못하면 바로 오류를 내고 마친다. 이 옵션은 배치 작업이나, 사용자 입력을 할 수 없는 스크립트에서 이 명령을 사용할 때 유용하게 사용된다.

-W
--password

pg_receivewal 명령이 지정한 서버로 접속하기 전에 비밀번호를 물어보는 프롬프트를 보여준다.

이 프롬프트를 통한 비밀번호 입력은 이 옵션을 지정하지 않아도, 자동으로 처리된다. 이와 반대로 pg_receivewal 명령에서 이런 자동 처리 때문에 사용자 입력을 기다리는 작업 자체를 무시하기 위해서, -w 옵션을 사용하며, 또한 자동으로 접속되는 정보를 무시하고, 사용자가 직접 비밀번호를 입력하고 싶을 때, -W 옵션을 이용한다.

다음은 pg_receivewal 명령에서 사용하는 물리 복제 슬롯과 관계된 옵션이다:

--create-slot

--slot 옵션에서 지정한 해당 슬롯을 만들고, 마친다.

--drop-slot

--slot 옵션에서 지정한 해당 슬롯을 지우고, 마친다.

기타 사용할 수 있는 옵션:

-V
--version

pg_receivewal 버전을 보여주고 마친다.

-?
--help

pg_receivewal 명령의 명령해 옵션에 대한 도움말을 보여주고 마친다.

Exit Status

pg_receivewal will exit with status 0 when terminated by the SIGINT signal. (That is the normal way to end it. Hence it is not an error.) For fatal errors or other signals, the exit status will be nonzero.

환경 변수

이 프로그램은 여느 libpq 라이브러리를 사용하는 PostgreSQL 응용 프로그램들과 마찬가지로, 같은 환경 변수를 사용할 수 있다(33.14절 참조).

The environment variable PG_COLOR specifies whether to use color in diagnostic messages. Possible values are always, auto and never.

참고

archive_command 환경 설정을 이용하지 않고, pg_receivewal 명령을 이용해서, WAL 백업을 하고자 한다면, 이 때는 그 서버에서 복제 슬롯을 사용하는 것이 좋다. 복제 슬롯을 사용하지 않으면, 상황에 따라 전달 받지 못하는 WAL 조각 파일을 생길 수도 있기 때문이다. 즉, WAL 로그를 완벽하게 특정 위치에 따로 보관하려면(아카이빙 하려면) archive_command 환경 설정을 지정하거나, 복제 슬롯을 이용해서 이 명령을 사용해야한다. 또한 복제 슬롯을 사용하는 경우, 그 슬롯을 통해 WAL 내용을 가지 가지 않으면 서버의 WAL 조각 파일이 지워지지 않아 결국 WAL 조각 파일을 저장하는 디렉터리의 여유공간이 없는 상황까지 생길 수 있음을 반드시 알고 있어야 한다. 이렇게 되면 서버는 멈춘다.

pg_receivewal will preserve group permissions on the received WAL files if group permissions are enabled on the source

예제

mydbserver 서버에서 만드는 미리-쓰기 로그를 받아서 /usr/local/pgsql/archive 로컬 디렉터리에 저장하는 명령:

$ pg_receivewal -h mydbserver -D /usr/local/pgsql/archive

관련 항목

pg_basebackup