pg_ctl 개요
pg_ctl 이란?
pg_ctl is a utility for initializing a PostgreSQL database cluster, starting, stopping, or restarting the PostgreSQL database server (postgres), or displaying the status of a running server.
– PostgreSQL 공식 문서 –
pg_ctl은 PostgreSQL 데이터베이스 클러스터를 초기화하고, 데이터베이스 서버를 시작, 중지 또는 재시작 또는 실행 중인 서버의 상태를 표시하는 유틸리티입니다. 서버를 수동으로 시작할 수 있지만, pg_ctl은 로그 출력 재연결 및 터미널과 프로세스 그룹에서 적절하게 분리하는 것과 같이 태스크를 캡슐화 합니다. 또한 여러 옵션이 포함된 종료 모드를 제공합니다.
pg_ctl 문법
pg_ctl init[db] [-D datadir] [-s] [-o initdb-options]
pg_ctl start [-D datadir] [-l filename] [-W] [-t seconds] [-s] [-o options] [-p path] [-c]
pg_ctl stop [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-W] [-t seconds] [-s]
pg_ctl restart [-D datadir] [-m s[mart] | f[ast] | i[mmediate] ] [-W] [-t seconds] [-s] [-o options] [-c]
pg_ctl reload [-D datadir] [-s]
pg_ctl status [-D datadir]
pg_ctl promote [-D datadir] [-W] [-t seconds] [-s]
pg_ctl logrotate [-D datadir] [-s]
pg_ctl kill signal_name process_id
pg_ctl 옵션
옵션 | 설명 |
---|---|
-c –core-files | 코어 파일에 대한 소프트 리소스 제한을 해제하여 서버 충돌이 가능한 플랫폼에서 코어 파일을 생성하도록 시도합니다. |
-D datadir –pgdata=datadir | 데이터베이스 config 파일의 파일 시스템 위치를 지정합니다. 이 옵션을 생략하면 환경변수 PGDATA가 사용됩니다. |
-l filename –log=filename | 서버 로그를 입력한 파일에 추가하고, 파일이 없으면 생성됩니다. |
-m mode –mode=mode | 종료 모드를 지정합니다. 모드는 smart, fast, immediate 세가지의 첫 문자 중 하나로 지정할 수 있습니다. 생략하면 fast가 기본 값입니다. |
-o options –options=options | postgres 커맨드에 직접 전달할 옵션을 지정합니다. |
-o initdb-options –options=initdb-options | initdb 명령에 직접 전달할 옵션을 지정합니다. |
-p path | postgres 실행 파일의 위치를 지정합니다. |
-s –silent | 오류 메세지만 출력하고 정보 메시지는 출력하지 않습니다. |
-t seconds –timeout=seconds | 작업이 완료될 때까지 기다릴 최대 시간(초)를 지정합니다. |
-V –version | pg_ctl 버전을 인쇄하고 종료합니다. |
-w –wait | 작업이 완료될 때까지 기다립니다. 이는 start, stop, restart, promote, register 모드에서 지원되며 기본값입니다. |
-W –no-wait | 작업이 완료될 때까지 기다리지 마십시오. 이것은 -w 옵션의 반대입니다. |
-? –help | pg_ctl 커맨드 옵션에 대한 도움말을 표시하고 종료합니다. |
pg_ctl 문법 ( for Windows )
pg_ctl register [-D datadir] [-N servicename] [-U username] [-P password] [-S a[uto] | d[emand] ] [-e source] [-W] [-t seconds] [-s] [-o options]
pg_ctl unregister [-N servicename]
pg_ctl 옵션 (for Windows)
옵션 | 설명 |
---|---|
-e source | Windows 서비스로 실행될 때 로그에 기록하는데 사용할 pg_ctl 이벤트 소스 이름입니다. |
-N servicename | 등록할 시스템 서비스의 이름입니다. |
-P password | 서비스를 실행할 사용자의 암호입니다. |
-S start-type | 시스템 서비스의 시작 유형입니다. start-type은 auto, demand 또는 이 둘 중 하나의 첫 글자일 수 있습니다. 이 옵션을 생략하면 auto이 기본 값입니다. |
-U username | 서비스를 실행할 사용자 이름입니다. |
pg_ctl 모드
init/initdb
pg_ctl init[db] [-D *datadir*] [-s] [-o *initdb-options*]
init
또는 initdb
모드는 새로운 PostgreSQL 데이터베이스 클러스터를 생성합니다. 이 모드는 initdb
커맨드를 호출합니다. 자세한 내용은 initdb를 참조해주세요!
start
pg_ctl start [-D *datadir*] [-l *filename*] [-W] [-t *seconds*] [-s] [-o *options*] [-p *path*] [-c]
start
모드에서는 데이터베이스 서버를 백그라운드에서 시작합니다. 일반적으로 커맨드라인 인터페이스 또는 터미널에서 서버 프로세스를 시작하여 사용자가 데이터베이스에 연결하고 사용할 수 있도록 합니다.
stop
pg_ctl stop [-D *datadir*] [-m s[mart] | f[ast] | i[mmediate] ] [-W] [-t seconds] [-s]
**stop**
모드에서는 지정된 데이터 디렉토리에서 실행 중인 서버를 종료합니다. 옵션으로 세가지의 다른 종료 방법을 선택할 수 있습니다.
- -m(stmart) : smart 모드는 새로운 연결을 허용하지 않고, 모든 기존의 클라이언트가 연결 해제될 때까지 기다립니다.
- -f(fast) : fast 모드는 기본 모드로, 클라이언트가 연결을 끊을때까지 기다리는게 아닌 강제로 연결 해제된 다음 서버가 종료됩니다.
- -i(immediate) : immediate 모드는 정상 종료 없이 즉시 모든 서버 프로세스를 중단합니다. 다음 서버 시작 중에 충돌 복구 주기가 발생합니다.
restart
pg_ctl restart [-D *datadir*] [-m s[mart] | f[ast] | i[mmediate] ] [-W] [-t seconds] [-s] [-o options] [-c]
**restart
**모드는 stop과 start를 효과적으로 실행합니다. 커맨드라인 옵션을 변경하거나 서버를 재시작하지 않고는 변경할 수 없는 config 파일 옵션을 변경할 수 있습니다.
reload
pg_ctl reload [-D *datadir*] [-s]
**reload
**모드는 단순히 postgres 서버 프로세스에 SIGHUP 신호를 전송하여 config 파일 (postgresql.conf, pg_hba.conf 등)을 다시 읽게 합니다. 이렇게 하면 전체 서버 재시작이 필요 없는 config 파일의 변경 내용을 적용할 수 있습니다.
status
pg_ctl status [-D *datadir*]
**status
**모드는 지정된 데이터 디렉토리에서 서버가 실행 중인지 여부를 확인합니다.
promote
pg_ctl promote [-D datadir] [-W] [-t seconds] [-s]
**promote
**모드는 지정된 데이터 디렉토리에서 실행중인 standby 서버가 standy 모드를 종료하고 Read/Write 작업을 시작하도록 명령합니다.
logrotate
pg_ctl logrotate [-D *datadir*] [-s]
**logrotate
**모드는 서버 로그 파일을 rotate시킵니다.
kill
pg_ctl kill signal_name process_id
**kill
**모드는 지정된 프로세스로 signal을 보냅니다. 기본 제공 명령인 kill이 없는 Windows에서 주로 유용하게 사용됩니다. --help
를 사용하여 지원되는 signal 목록을 확인합니다.
register
pg_ctl register [-D *datadir*] [-N servicename] [-U username] [-P password] [-S a[uto] | d[emand] ] [-e source] [-W] [-t seconds] [-s] [-o options]
**register
**모드는 Windows에서 시스템 서비스로 PostgreSQL 서버를 등록합니다. -S
옵션을 사용하면 서비스 시작 유형을 “자동”/”요구 시 서비스 시작” 중 하나로 선택할 수 있습니다.
unregister
pg_ctl unregister [-N *servicename*]
**unregister
**모드는 Windows에서 시스템 서비스의 등록을 취소합니다.
pg_ctl 사용 예시
서버 시작
5433포트를 사용해 서버를 시작
[opensql@localhost:~]$ pg_ctl -o “-p 5433” start
waiting for server to start….2023-01-13 23:00:05.106 KST [108481] LOG: redirecting log output to logging collector process
2023-01-13 23:00:05.106 KST [108481] HINT: Future log output will appear in directory “/opensql/pg/14/log/pg_log”.
done
server started
서버 종료
서버가 종료되는 방식을 smart로 설정하여 종료
[opensql@localhost:~]$ pg_ctl stop -m smart -D /opensql/pg/14/data
waiting for server to shut down…. done
server stopped
서버 재시작
fsync를 비활성화하고 5433포트를 사용하여 서버 재시작
[opensql@localhost:~]$ pg_ctl -o “-F -p 5433” -D /opensql/pg/14/data restart
pg_ctl: PID file “/opensql/pg/14/data/postmaster.pid” does not exist
Is server running?
trying to start server anyway
waiting for server to start….2023-01-13 23:05:18.568 KST [110396] LOG: redirecting log output to logging collector process
2023-01-13 23:05:18.568 KST [110396] HINT: Future log output will appear in directory “/opensql/pg/14/log/pg_log”.
done
server started
서버 상태 표시
서버의 상태 출력
[opensql@localhost:~]$ pg_ctl status
pg_ctl: server is running (PID: 110396)
/usr/pgsql-14/bin/postgres “-F” “-p” “5433”
pg_ctl 환경변수
다음 환경변수들과 같이 pg_ctl을 사용할 수 있습니다.
환경변수 | 설명 |
---|---|
PGCTLTIMEOUT | 시작 또는 종료가 완료될 때까지 기다리는 시간(초)에 대한 기본 제한입니다. 설정하지 않으면 기본 값은 60초입니다. |
PGDATA | 기본 데이터 디렉토리 위치입니다. |
사용 방법
export PGHOME=/opensql/pg #opensql engine directory
export PGDATA=/opensql/pg/$PGVERSION/data #opensql database clsuter directory
export PGHOST=/var/run/opensql #opensql socket directory
export PGUSER=postgres #opensql Basic DB User Name
export PGPASSFILE=’/opensql/.pgpass’ #opensql pgpass file
대부분의 pg_ctl 모드에서는 데이터 디렉토리 위치를 알아야 합니다. 따라서 -D 옵션을 설정하지 않을 경우 PGDATA 환경변수를 반드시 설정해주어야 합니다. PGDATA 환경변수를 사용하면 다음과 같이 pg_ctl 커맨드를 사용할 수 있습니다.
[opensql@localhost:~]$ pg_ctl start
waiting for server to start….2023-01-13 14:22:23.975 KST [102101] LOG: redirecting log output to logging collector process
2023-01-13 14:22:23.975 KST [102101] HINT: Future log output will appear in directory “/opensql/pg/14/log/pg_log”.
done
server started
[opensql@localhost:~]$ pg_ctl stop
waiting for server to shut down…. done
server stopped
지금까지 ’PostgreSQL pg_ctl’에 관해 알아보았습니다
‘PostgreSQL pg_dump’을 바로 이어서 확인해보세요!