HOWTO · PostgreSQL
PostgreSQL 서버가 macOS에서 실행 중인지 확인
이 기사에서는 PostgreSQL의 상태를 확인하기 위한 여러 BASH 명령에 대해 언급합니다.
이 페이지의 내용
클라이언트가 PostgreSQL에 연결할 수 있는 상태인지 확인하려면 먼저 pg_isready를 사용하세요. 프로세스 확인만으로는 프로세스가 존재한다는 사실만 알 수 있습니다. 아래 명령은 macOS 셸을 기준으로 합니다. PostgreSQL 패키지마다 설치 구조가 다르므로 명령 위치와 클러스터 경로는 배포판 및 설정에 따라 달라집니다.
macOS에서 PostgreSQL 프로세스와 연결 준비 상태 확인하기
답하려는 질문에 맞는 확인 방법을 선택하세요. pg_isready는 PostgreSQL 서버가 연결 시도에 응답하는지 확인합니다. pg_ctl status는 데이터 디렉터리를 알고 있을 때 특정 클러스터의 상태를 확인합니다. ps로 프로세스를 살펴보면 서버 프로세스를 찾는 데 도움이 되지만, 클라이언트가 실제로 연결할 수 있는지는 확인할 수 없습니다. 이 신호들은 서로 관련은 있지만 같은 의미는 아닙니다.
아래 예제는 명령 사용 패턴이며 로컬 데이터베이스에서 캡처한 출력이 아닙니다. PostgreSQL 설치 환경, 서버, 자격 증명, 경로는 환경에 따라 다르므로 호스트, 포트, 사용자, 데이터 디렉터리를 자신의 설정에 맞게 조정하세요.
pg_isready로 연결 준비 상태 확인하기
기본 연결 대상을 확인하려면 pg_isready를 실행하고, 특정 호스트와 포트를 확인하려면 -h localhost, -p 5432와 같은 옵션을 지정하세요. 종료 상태는 스크립트에서 유용하게 사용할 수 있습니다.
0: 서버가 연결을 수락하고 있습니다.1: 서버가 연결을 거부하고 있습니다. 예를 들어 서버가 시작 중일 수 있습니다.2: 응답을 받지 못했습니다.3: 매개변수가 유효하지 않은 경우처럼 연결 시도가 이루어지지 않았습니다.
PostgreSQL pg_isready 문서에서 이 종료 상태와 명령의 연결 옵션을 설명합니다.
성공 상태는 해당 대상에서 서버가 연결 시도를 받아들인다는 뜻입니다. 특정 데이터베이스, 역할, 암호, 스키마 또는 쿼리를 사용할 수 있는지는 검증하지 않으므로, 완전한 상태 점검이 아니라 준비 상태를 나타내는 신호로 보아야 합니다.
간단한 셸 분기문으로 문서에 설명된 성공 상태를 처리할 수 있습니다. 여기서는 변수를 직접 설정하므로 예제가 데이터베이스에 연결하지 않습니다.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
status=0
case "$status" in
0) printf '%s\n' 'accepting connections' ;;
esac
accepting connections
실제로 확인할 때는 pg_isready를 실행한 직후 종료 상태를 저장하고 그 값에 따라 분기하세요. 나중에 실행한 명령이 셸의 가장 최근 종료 상태를 바꿀 수 있습니다.
pg_ctl status로 알려진 데이터 디렉터리 확인하기
PGDATA가 클러스터의 데이터 디렉터리를 가리키는 경우 pg_ctl -D "$PGDATA" status를 사용하세요. 예를 들어 pg_ctl -D /path/to/cluster status처럼 디렉터리를 직접 지정할 수도 있습니다. 환경에서 데이터 디렉터리를 알아낼 수 없다면 pg_ctl에 올바른 디렉터리를 전달해야 합니다. postgres 실행 파일의 경로는 클러스터 디렉터리가 아닙니다.
PostgreSQL pg_ctl 문서에서 여기 사용된 status, start 작업과 -D, -l 옵션을 설명합니다.
이 확인 방법은 해당 데이터 디렉터리의 postmaster 프로세스가 실행 중인지 보고합니다. 프로세스가 실행 중이어도 PostgreSQL이 클라이언트 연결을 받아들인다는 뜻은 아닙니다. 그 여부는 pg_isready로 확인하세요. 셸 시작 파일에서 PGDATA를 설정했다면, 이 값을 사용하기 전에 초기화된 클러스터 디렉터리를 가리키는지 확인하세요.
ps로 PostgreSQL 프로세스 살펴보기
프로세스를 확인하려면 ps aux | grep '[p]ostgres'를 사용하거나, 지원되는 환경에서는 pgrep -fl postgres를 사용하세요. 대괄호 패턴은 grep이 자기 자신의 명령줄을 검색 결과에 포함하지 않도록 합니다. 프로세스 이름과 인수를 보면 서버 실행과 해당 서버의 -D 디렉터리를 파악하는 데 도움이 될 수 있지만, 일치하는 프로세스는 보조 신호일 뿐입니다. 서버가 시작 중이거나 종료 중일 수도 있고, 연결을 받아들이지 못하는 상태일 수도 있습니다.
psql은 다른 질문에 답합니다. psql -h localhost -p 5432 -U myuser -d mydb -c 'SELECT 1' 같은 명령은 인증을 거쳐 연결하고 쿼리를 실행합니다. 실패 원인은 자격 증명, 데이터베이스 선택, 네트워크 설정 또는 서버 가용성일 수 있으므로, 프로세스만 확인하는 테스트가 아닙니다.
연결 및 데이터 디렉터리 오류 진단하기
“Connection refused”는 요청한 엔드포인트가 그 시점에 연결을 받아들이지 않았다는 뜻입니다. 호스트와 포트가 의도한 값인지 확인한 다음, 결과를 pg_isready로 비교하고 관련 서버 로그를 살펴보세요. 이 메시지만으로 컴퓨터의 모든 PostgreSQL 인스턴스가 중지되었다고 단정할 수는 없습니다. 서비스가 다른 주소나 포트에서 수신 중일 수 있습니다.
postmaster.pid가 없거나 사용할 수 없다는 pg_ctl 메시지는 데이터 디렉터리 경로 오류, 권한 문제 또는 실행 중이 아닌 클러스터를 가리킬 수 있습니다. 클러스터를 초기화할 때 사용한 디렉터리와 PGDATA 값을 확인하세요. which postgres의 출력을 -D에 사용하지 마세요. 이 명령은 실행 파일을 찾지만, -D에는 클러스터 데이터 디렉터리가 필요합니다. 어떤 클러스터가 해당 PID 파일을 소유하는지, 그 서버가 중지되었는지 확인하기 전에는 PID 파일을 삭제하지 마세요.
중지된 PostgreSQL을 pg_ctl로 시작하기
관련 클러스터가 중지되어 있고 데이터 디렉터리를 확인했다면 pg_ctl -D "$PGDATA" -l "$PGDATA/server.log" start로 시작하세요. PGDATA가 설정되어 있지 않다면 올바른 디렉터리 경로로 바꾸세요. -D 옵션에는 클러스터 디렉터리를 지정하고, -l 옵션에는 로그 파일을 지정합니다. 명령을 실행하는 계정에 클러스터와 로그 위치에 접근할 권한이 있어야 합니다. 패키지 관리형 설치 환경에서는 해당 패키지의 관리 도구로 서비스를 시작해야 할 수도 있습니다.
시작한 뒤에는 의도한 호스트와 포트에서 pg_isready를 실행해 연결 준비 상태를 확인하세요. 특정 데이터 디렉터리의 상태를 확인하려는 경우에는 pg_ctl ... status를 사용하세요. 요약하면, 프로세스를 찾을 때는 프로세스 검사를, 알려진 클러스터를 확인할 때는 pg_ctl status를, 클라이언트가 연결할 수 있는지 확인할 때는 pg_isready를 사용하세요.