psql 클라이언트로 PostgreSQL데이터베이스 접속 오류 대응하기(서버 환경 설정 파일 구성을 변경)

Linux

아래 “작업 환경”과 같이 psql 클라이언트를 실행하는 컴퓨터와 PostgreSQL 데이터베이스 서버가 다르면 psql 명령을 실행하여 PostgreSQL 데이터베이스 서버에 접속하려고 할 때 서버 쪽의 기본 설정 상태로는 접속 오류가 발생 할 수 있습니다. 이런 종류의 오류는 서버 쪽 Linux 운영 체제 컴퓨터firewall, 그리고 PostgreSQL의 postgresql.conf과 pg_hba.conf의 환경 설정 내용을 변경해서 접속 오류를 해결할 수 있습니다. 이 글에서는 firewall의 PostgreSQL의 접속 port 5432/tcp 허가, 그리고 PostgreSQL서버가 클라이언트 컴퓨터의 IP 주소를 신뢰하도록 설정 변경으로 psql접속을 성공 시키는 방법을 소개하겠습니다.

작업 환경

이 글은 다음과 같은 환경에서 확인했습니다.OS버전에 따라 화면 내용과 액세스 경로가 다를 수 있습니다. 꼭 확인 바랍니다.

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?

오류의 원인

위의 오류가 발생했다면 다음과 같은 원인이 예상됩니다.

  1. PostgreSQL 데이터베이스 서버를 운영하는 Linux 운영 체제 컴퓨터의 전원이 커진 상태
  2. 네트워크에 문제가 생겼거나 192.168.220.143 주소 지정이 잘못되었을 경우
  3. 방화벽 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 접속을 허가 하십시오

Linux7 방화벽(firewall) 서버-클라이언트 프로그램을 위한 접속 port 열어주기
Linux7 운영 체제 컴퓨터(이하 서버)에 서버 프로그램을 설치해 사용하고자 한다면 다음과 같이 외부 컴퓨터(이하 클라이언트)에서 접속 할 수 있도록 서버와 약속한 접속Port가 열려있어야 합니다. 그렇지 않는다면...

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 운영 체제 컴퓨터에서 다음과 같은 원인이 예상됩니다.

  1. Linux PostgreSQL version13설치하기” 직후의 postgresql.conf설정 파일 내용이 다음과 같이 초기 상태인 경우입니다.
  2. 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 운영 체제 컴퓨터에서 다음과 같은 원인이 예상됩니다.

  1. 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=#
제목과 URL을 복사했습니다