아래 “작업 환경”과 같이 psql 클라이언트를 실행하는 컴퓨터와 PostgreSQL 데이터베이스 서버가 다르면 psql 명령을 실행하여 PostgreSQL 데이터베이스 서버에 접속하려고 할 때 서버 쪽의 기본 설정 상태로는 접속 오류가 발생 할 수 있습니다. 이런 종류의 오류는 서버 쪽 Linux 운영 체제 컴퓨터의 firewall, 그리고 PostgreSQL의 postgresql.conf과 pg_hba.conf의 환경 설정 내용을 변경해서 접속 오류를 해결할 수 있습니다. 이 글에서는 firewall의 PostgreSQL의 접속 port 5432/tcp 허가, 그리고 PostgreSQL서버가 클라이언트 컴퓨터의 IP 주소를 신뢰하도록 설정 변경으로 psql접속을 성공 시키는 방법을 소개하겠습니다.
작업 환경
이 글은 다음과 같은 환경에서 확인했습니다.OS버전에 따라 화면 내용과 액세스 경로가 다를 수 있습니다. 꼭 확인 바랍니다.
- PostgreSQL 데이터베이스 서버를 운영하는 Linux 운영 체제 컴퓨터
- OS : CentOS 7
- IP Address(예) : 192.168.220.143
- “Linux PostgreSQL version13설치하기” 글을 참조해서 설치하십시오.
- psql 클라이언트를 실행하는 Windows 운영 체제 컴퓨터
- OS : Windows 10 Pro
- IP Address(예) : 192.168.220.142
- “PostgreSQL Windows에서 psql 클라이언트만 설치하기” 글을 참조해서 설치하십시오.
Connection timed out 오류
C:\>psql -h 192.168.220.143 -U postgres
psql: error: could not connect to server: Connection timed out (0x0000274C/10060)
Is the server running on host "192.168.220.143" and accepting
TCP/IP connections on port 5432?
오류의 원인
위의 오류가 발생했다면 다음과 같은 원인이 예상됩니다.
- PostgreSQL 데이터베이스 서버를 운영하는 Linux 운영 체제 컴퓨터의 전원이 커진 상태
- 네트워크에 문제가 생겼거나 192.168.220.143 주소 지정이 잘못되었을 경우
- 방화벽 firewall이 작동 중이고 PostgreSQL의 접속 port 5432/tcp이 허가 되어있지 않은 경우
오류 해결 방법
위 오류의 원인 “1.”과 “2.”를 해결하기 위해서는 컴퓨터의 전원을 연결하고 , 네트워크를 사용 가능하도록 설정합니다.
컴퓨터의 전원이 연결된 상태이면서 네트워크에도 연결된 상태임을 Windows의 [명령 프롬프트]창을 열어 다음과 같이 ping명령을 실행해서 확인할 수 있습니다.
C:\>ping 192.168.220.143
Ping 192.168.220.143 32바이트 데이터 사용:
192.168.220.143의 응답: 바이트=32 시간<1ms TTL=64
192.168.220.143의 응답: 바이트=32 시간<1ms TTL=64
192.168.220.143의 응답: 바이트=32 시간<1ms TTL=64
192.168.220.143의 응답: 바이트=32 시간<1ms TTL=64
192.168.220.143에 대한 Ping 통계:
패킷: 보냄 = 4, 받음 = 4, 손실 = 0 (0% 손실),
왕복 시간(밀리초):
최소 = 0ms, 최대 = 0ms, 평균 = 0ms
참고로 컴퓨터의 전원이 연결이 안되었거나 네트워크에 연결이 끊어진 상태인 경우 다음과 같은 결과가 표시됩니다.
C:\>ping 192.168.220.143
Ping 192.168.220.143 32바이트 데이터 사용:
192.168.220.143의 응답: 대상 호스트에 연결할 수 없습니다.
192.168.220.143의 응답: 대상 호스트에 연결할 수 없습니다.
192.168.220.143의 응답: 대상 호스트에 연결할 수 없습니다.
192.168.220.143의 응답: 대상 호스트에 연결할 수 없습니다.
192.168.220.143에 대한 Ping 통계:
패킷: 보냄 = 4, 받음 = 4, 손실 = 0 (0% 손실),
방화벽 firewall은 Linux 운영 체제 컴퓨터에서 작동 중인 서비스 입니다. 위 오류의 원인 “3.”을 해결하기 위해서는 다음 글의 참조해서 PostgreSQL Database 서버의 port 5432/tcp 접속을 허가 하십시오
Connection refused 오류
C:\>psql -h 192.168.220.143 -U postgres
psql: error: could not connect to server: Connection refused (0x0000274D/10061)
Is the server running on host "192.168.220.143" and accepting
TCP/IP connections on port 5432?
오류의 원인
위의 오류가 발생했다면 PostgreSQL 데이터베이스 서버를 운영하는 Linux 운영 체제 컴퓨터에서 다음과 같은 원인이 예상됩니다.
- “Linux PostgreSQL version13설치하기” 직후의 postgresql.conf설정 파일 내용이 다음과 같이 초기 상태인 경우입니다.
- listen_addresses는 미설 정인 경우 localhost , port는 미 설정인 경우 기본 값 5432를 사용합니다.
# vi /var/lib/pgsql/13/data/postgresql.conf
... 중간 생략 ...
#listen_addresses = 'localhost' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
#port = 5432 # (change requires restart)
... 중간 생략 ...
오류 해결 방법
다음 과 같이 수정합니다.
# vi /var/lib/pgsql/13/data/postgresql.conf
... 중간 생략 ...
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
#port = 5432 # (change requires restart)
... 중간 생략 ...
no pg_hba.conf entry 오류
C:\>psql -h 192.168.220.144 -U postgres
psql: error: FATAL: no pg_hba.conf entry for host "192.168.220.134", user "postgres", database "postgres", SSL off
오류의 원인
위의 오류가 발생했다면 PostgreSQL 데이터베이스 서버를 운영하는 Linux 운영 체제 컴퓨터에서 다음과 같은 원인이 예상됩니다.
- “Linux PostgreSQL version13설치하기” 직후의 pg_hba.conf 설정 파일 내용이 다음과 같이 초기 상태인 경우입니다.
# vi /var/lib/pgsql/13/data/pg_hba.conf
... 중간 생략 ...
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
... 중간 생략 ...
오류 해결 방법
다음 과 같이 psql 클라이언트 컴퓨터 192.168.220.142에 대한 인증 방법 trust 행을 추가 합니다.
# vi /var/lib/pgsql/13/data/pg_hba.conf
... 중간 생략 ...
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
host all all 192.168.220.142/24 trust
... 중간 생략 ...
정상 접속 결과
위의 오류를 전부 해결하면 psql 클라이언트 컴퓨터에서 psql명령을 사용하여 다음과 같이 PostgreSQL 데이터베이스 서버에 접속을 확인 할 수 있습니다.
C:\>psql -h 192.168.220.143 -U postgres
psql (13.3, server 12.7)
Type "help" for help.
postgres=#