pg_ctl — PostgreSQL 서버 초기화, 시작, 중지, 제어
pg_ctl
init[db]
[-D
데이터디렉터리
] [-s
] [-o
initdb옵션
]
pg_ctl
start
[-D
데이터디렉터리
] [-l
파일이름
] [-W
] [-t
초
] [-s
] [-o
옵션
] [-p
경로
] [-c
]
pg_ctl
stop
[-D
데이터디렉터리
] [-m
s[mart]
| f[ast]
| i[mmediate]
] [-W
] [-t
초
] [-s
]
pg_ctl
restart
[-D
데이터디렉터리
] [-m
s[mart]
| f[ast]
| i[mmediate]
] [-W
] [-t
초
] [-s
] [-o
옵션
] [-c
]
pg_ctl
reload
[-D
데이터디렉터리
] [-s
]
pg_ctl
status
[-D
데이터디렉터리
]
pg_ctl
promote
[-D
데이터디렉터리
] [-W
] [-t
초
] [-s
]
pg_ctl
logrotate
[-D
datadir
] [-s
]
pg_ctl
kill
시그널이름
프로세스ID
Microsoft Windows 환경에서는 다음 명령도 가능하다:
pg_ctl
register
[-D
데이터디렉터리
] [-N
서비스이름
] [-U
사용자이름
] [-P
비밀번호
] [-S
a[uto]
| d[emand]
] [-e
이벤트소스
] [-W
] [-t
초
] [-s
] [-o
옵션
]
pg_ctl
unregister
[-N
서비스이름
]
pg_ctl 명령은 PostgreSQL 데이터베이스 서버 (postgres) 제반 작업을 수행한다. 이 작업은 데이터베이스 클러스터 초기화, 서버 시작, 중지, 재시작, 서버 상태 출력등이다. 물론 서버는 postgres 명령으로 직접 실행할 수 있으나, pg_ctl 명령을 이용하면, 보다 쉽고, 안전하게 관리할 수 있다. 서버의 로그 처리나, 하위 프로세스 관리나, 중지 방법을 보다 직관적으로 선택할 있게 한다.
init
또는 initdb
모드는
PostgreSQL 데이터베이스 클러스터를
만드는 일을 한다. 데이터베이스 클러스터란 하나의 서버 인스턴스가
관리하는 최상위 자료 집합이다. 이 작업은 내부적으로
initdb
명령을 사용한다. 이 명령의 자세한 설명은
initdb 설명서에서 다룬다.
start
모드는 서버를 실행하는 일을 한다. 이 서버는
백그라운드로 실행되며, 표준 입력 장치로 /dev/null
장치를 사용한다(Windows에서는 nul
). 표준 출력 장치는
여느 유닉스 프로그램과 마찮가지로,
/dev/stdout
, /dev/stderr
장치를 사용한다. (유닉스 장치 개념을 잘 모르는 이들을 위한 설명 -
아주 단순하게 설명하면, 서버가 출력하는 각종 메시지 가운데,
오류 메시지들은 /dev/stderr 쪽으로 보내고, 나머지는 /dev/stdout
즉 사용자가 현재 보고 있는 화면으로 보낸다. - 옮긴이)
이렇기 때문에, 파이프를 이용해서, 서버 로그를
rotatelogs 프로그램으로 보낼 수 있다. (이 부분에
대한 자세한 설명은 유닉스, 리눅스 설명서를 살펴 보면 된다.) 이와 달리
이 표준 출력과 표준 오류 장치로 보내는 내용을 파일로 저장하려면,
-l
옵션을 사용하면 된다.
(실 업무 환경에서는 서버 로그 처리는 서버 환경 설정에서 지정하기 때문에,
pg_ctl 명령에 의해서 만들어지는 로그는 극히 적다.
pg_ctl 명령이 시스템 부팅 때 자동으로
실행되는 경우라면, 이 명령어 실행 내역을 보관하기 위해서 -l 옵션이 필요
할지도 모르겠지만, 서버 실행을 사용자 직접 한다면,
postgres 서버 로그는 로그 파일로 따로
저장하도록 설정하고, pg_ctl 실행 로그는
작업자가 화면에서 바로 보는 것이 일반적이다. - 옮긴이)
stop
모드는 서버를 중지하는 일을 한다.
서버 중지 방법은 세가지다. 이는 -m
옵션으로
지정한다. “Smart”: 이 모드는 새 연결 금지, 기존 연결
끊길 때까지 대기, 모든 온라인 백업 종료한다. “Fast”:
현재 접속해 있는 클라이언트의 모든 작업을 강제로 중지하고,
모든 클라이언트 접속을 끊고, 서버를 중지한다. “Immediate”:
클라이언트 세션 정리 작업을 모두 무시하고, 즉시 서버를 중지한다.
이렇게 중지된 서버가 재실행되면, 자동 복구 모드로 실행된다.
restart
모드는 서버 재실행하는 일을 한다.
여기서 postgres
명령행 옵션이나,
환경 설정 파일 내용을 바꾸고 그것을 서버 재실행 해야만
하는 경우 이 모드를 사용한다. 만약 서버를 실행 할 때,
상대 경로를 지정했다면, 그 시작할 때의 위치에서 재실행해야
정상적으로 재실행 될 수 있다. 그렇지 않은 경우는 오류가
발생할 수 있다.
reload
모드는
단순하게 postgres
서버 프로세스에
SIGHUP 시그널만 보낸다. 이 신호를 받으면,
서버는 환경 설정 파일(postgresql.conf
,
pg_hba.conf
등)을 다시 불러 온다. 이렇게
해서 서버 재시작 없이 환경 설정을 바꿀 때 이용한다. 물론
재시작을 해야만 변경 할 수 있는 환경 설정은 설정 파일에서
변경 했다 하더라도 이 때 반영되지 않는다.
status
모드는 지정한 데이터 디렉터리를 사용하는
서버 실행 상태를 보여준다. 실행 중인 서버가 있다면,
그 서버의 PID와 명령행 옵션을 보여준다. 실행
중인 서버가 없다면, pg_ctl 실행
반환 값으로 3을 반환하고 종료한다. 지정한 데이터 디렉터리로
접근 할 수 없다면, 4를 반환하고 종료한다.
promote
모드는 해당 서버가
읽기 전용 보조 서버였다면, 운영 서버와의 관계를 끊고,
그 서버를 읽기-쓰기 가능한 또 다른 운영 서버로 바꾸는
일을 한다.
logrotate
mode rotates the server log file.
For details on how to use this mode with external log rotation tools, see
24.3절.
kill
모드는
지정한 프로세스에 지정한 시그널을 보내는 일을 한다.
이 명령은 내장된 kill 명령이 없는
Microsoft Windows 환경에서도 사용할 수 있다.
사용할 수 있는 시그널 이름은 --help
옵션을
이용해 볼 수 있는 도움말에서 소개하고 있다.
register
모드는 Microsoft Windows
에서 PostgreSQL 서버 운영을 위해 시스템
서비스로 등록하는 일을 한다.
-S
옵션으로 해당 서비스 시작 유형을 지정할 수
있다. “auto”는 OS 시작 할 때 자동으로 실행,
“demand”는 수동으로 서비스를 시작한다.
unregister
모드는 Microsoft Windows
에서 등록한 해당 서비스를 삭제하는 일을 한다.
register
작업의 반대 일이다.
-c
--core-files
해당 OS가 지원한다면, 서버가 비정상 종료될 경우 코어 덤프 파일을 만들도록 지정한다. 이 코어 덤프 파일에는 서버 종료 때의 여러 자원 상황을 기록해 놓는다. 이 코어 덤프 파일은 서버 문제점을 찾는데 유용하게 사용된다.
-D 데이터디렉터리
--pgdata=데이터디렉터리
데이터베이스 환경 설정 파일이 있는 디렉터리. 이 옵션을 생략하면,
PGDATA
환경 변수 값을 이 디렉터리로 간주한다.
-l 파일이름
--log=파일이름
지정한 filename
파일에
로그를 기록한다. 해당 파일이 없으면 만든다. 이 때 사용하는
umask 값이 077이며, 이게 기본값이다. 이 명령을 실행하는
사용자만 그 내용을 볼 수 있다.
-m 모드
--mode=모드
서버 중지 방법을 지정한다. 모드
값은
smart
, fast
,
immediate
이 세가지며, 각 단어의 첫글자만
사용할 수도 있다.
이 옵션이 없으며, fast
모드로 서버가 중지된다.
-o 옵션
--options=옵션
postgres
서버를 실행할 때 사용할 옵션을
지정한다.
-o
옵션은 하나의 명령행에 여러번 사용할 수 있다.
옵션
값으로 여러 옵션을 지정한다면, 그 모두를
작은 따옴표나, 큰 따옴표로 둘러쌓야한다. (하나의 -o 옵션 값으로
해석되도록 해야한다.)
-o initdb옵션
--options=initdb옵션
initdb
명령을 호출 할 때 사용하는
옵션을 지정한다.
-o
옵션은 하나의 명령행에 여러번 사용할 수 있다.
initdb옵션
값으로 여러 옵션을 지정한다면, 그 모두를
작은 따옴표나, 큰 따옴표로 둘러쌓야한다. (하나의 -o 옵션 값으로
해석되도록 해야한다.)
-p 경로
postgres
실행 파일 경로를 지정한다.
기본적으로 pg_ctl
실행 파일이 있는 디렉터리 안에
이 실행 파일도 있으며, 그렇지 않은 경우는 정상적으로
실행할 수 없다. 이 옵션은 특이한 상황에서
postgres
실행 파일을 찾을 수 없다고 할 때
사용하지, 일반적인 상황에서는 사용하지 않는다.
init
모드에서도 이 옵션은
initdb
실행 파일의 경로를 지정하는 역할을 한다.
-s
--silent
정보성 메시지를 보여주지 않고, 오류 메시지만 보여 줌.
-t 초
--timeout=초
해당 작업을 시작한 뒤, 최대 기다리는 시간(초단위)
(-w
옵션 설명 참조). 기본값은 60초이며,
PGCTLTIMEOUT
환경 변수 값으로 이 기본값을 바꿀 수 있다.
-V
--version
pg_ctl 버전을 보여주고 마침
-w
--wait
해당 작업이 완료되기까지 기다림. start
,
stop
, restart
,
promote
, register
작업은
실재 데이터베이스 서버가 그 일을 진행하기 때문에,
pg_ctl
입장에서는 해당 작업이 완료 될 때까지
기다릴지, 바로 작업을 마무리했다고 간주하고, 프로그램을
종료할지를 결정해야한다. 이 옵션을 사용하면,
해당 작업이 완료될까지 기다린다.
pg_ctl
명령은 기다릴 때,
서버 PID 파일을 주기적으로 확인한다.
서버 시작 작업이라면, PID 파일이 생성되고,
클라이언트 접속이 가능한 상태를 확인할 때까지 기다리며,
서버 중지 작업이라면, PID 파일이 없어
질 때까지 기다린다. pg_ctl
명령의
실행 반환값은 서버의 시작, 중지 작업이 정상적으로
수행 되었느냐에 따라 적당한 값을 반환한다.
이 기다리는 시간은 -t
(위 옵션 설명 참조) 옵션으로
그 최대 시간을 지정할 수 있으며, 이 시간까지도 작업이 완료되지
않으면, pg_ctl
명령은 0 아닌 값을 반환하며 마친다.
이렇게 pg_ctl
명령이
종료되었다할지라도 서버 시작, 중지 작업은 백그라운드로 계속 중일 수
있음을 기억해야 한다. (이런 경우는 관리자가 직접 확인하고
필요하다면 적당한 조치를 취해야 한다. - 옮긴이)
-W
--no-wait
작업 대기를 하지 않고 바로 종료한다. -w
옵션의
반대 기능이다.
작업 대기를 하지 않아도, 원하는 작업은 백그라운드로 진행을 하지만, 그 실 작업의 정상적인 완료 상태는 확인할 수 없다. 이 경우는 서버 로그를 확인하거나 일련의 다른 작업 상태를 확인하는 작업이 필요하다.
이 옵션은 이전 버전까지 stop
모드를 제외하고는
모든 모드에서 기본값으로 사용되었다.
-?
--help
pg_ctl 명령행 옵션들 설명을 보여주고 마침
구문상 옵션 지정은 바르게 했지만, 그 옵션이 사용하는 모드와 관계 없다면, 그 옵션들은 무시된다.
-e 이벤트소스
Windows 서비스로 서버를 운영할 때, 이벤트 로그에서 사용할
이벤트 소스 이름.
기본값은 PostgreSQL
이다. 이것은
pg_ctl 명령이 만드는
로그에 대해서만 관여한다. 서버 설정으로
event_source 환경 설정 매개 변수값을
지정해서 이벤트 소스를 다르게 지정했다면, 서버에서
만드는 로그는 다르게 다룬다. 하지만, 서버가 이 설정을 반영하기도
전에 중지 된다면 - 서버 시작을 실패한다면, 기본값인
PostgreSQL
로 이벤트 소스를 사용할 것이다.
-N 서비스이름
시스템 서비스로 등록할 서비스 이름. 이 이름은 서비스 목록에
서비스 이름으로 사용한다. 기본값은 PostgreSQL
이다.
-P 비밀번호
서비스를 시작할 사용자의 비밀번호.
-S 시작유형
서비스 시작 유형. 시작유형
값으로
auto
또는 demand
를 사용할
수 있으며, 이 단어의 첫글자만 사용해도 된다. 기본값은
auto
다.
-U 사용자이름
서비스를 시작할 사용자 이름. 도메인 사용자라면,
DOMAIN\username
형태로 지정한다.
PGCTLTIMEOUT
기본 대기 시간. 이 값(초)만큼 서버 시작이나, 종료 작업시, 해당 작업이 정상적으로 완료되었는지 확인하는 작업을 한다. 이 환경 변수 설정이 없으면, 60초 동안 기다린다.
PGDATA
기본 데이터 디렉터리
pg_ctl
의 여러 모드는 데이터 디렉터리를 꼭 지정해야
한다. 이 때, -D
옵션을 생략하면, 이 PGDATA
환경 변수값을 사용한다.
pg_ctl
명령도 대부분 여러 PostgreSQL
도구들과 마찬가지로 libpq 라이브러를 사용하기
때문에, 이 라이브러리에서 사용할 수 있는 환경 변수들을 사용할 수
있다(33.14절 참조).
추가적으로 서버에서 사용하는 환경 변수 설명은 postgres에서 소개하고 있다.
postmaster.pid
pg_ctl 프로그램이 서버가 현재 실행 중인지 검사 할 때 찾는 파일.
postmaster.opts
이 파일이 데이터 디렉터리 안에 있다면,
pg_ctl restart
모드에서
이 파일의 내용을 postgres
실행 옵션으로 지정해서 재실행한다. 물론 -o
옵션으로 지정해 그 값을 바꿀 수 있다면, 그 값을 우선 사용한다.
pg_ctl 프로그램이
status
모드로 실행되고,
서버가 실행 중일 때 이 파일의 내용을 보여준다.
클라이언트 접속이 가능한 상태로 서버가 실행되는데까지 기다리는 명령:
$
pg_ctl start
fsync
기능을 끄고,
포트를 5433으로 서비를 실행하는 명령:
$
pg_ctl -o "-F -p 5433" start
서버 중지 명령:
$
pg_ctl stop
-m
옵션을 사용해 서버 중지 방법을 지정한 경우:
$
pg_ctl stop -m smart
서버 재실행은 중지하고 시작하는 것과 같다. pg_ctl
명령을 사용하면, 서버가 시작될 때 지정한 여러 명령행 옵션들을
보관했다가 재시작할 때 사용하기 때문에, 재시작 할 때는
특별히 바꿀 경우가 아니라면, 아무 옵션 없이 사용해도 된다:
$
pg_ctl restart
-o
옵션을 사용하면 재 시작시 서버 실행 환경이 바뀐다.
다음은 fsync
기능을 끄고, 포트를 5433으로 바꾸어 재실행하는
경우다:
$
pg_ctl -o "-F -p 5433" restart
pg_ctl 명령을 이용한 서버 상태 보기:
$
pg_ctl status
pg_ctl: server is running (PID: 13718) /usr/local/pgsql/bin/postgres "-D" "/usr/local/pgsql/data" "-p" "5433" "-B" "128"
두번째 줄은 서버 재실행 할 때 사용되는 명령이다.