Computer >> 컴퓨터 >  >> 문제 해결 >> Linux

psql 연결 오류 해결: '서버에 연결할 수 없습니다. 해당 파일이나 디렉터리가 없습니다.'

PostgreSQL 서버 연결 오류 해결 방법

PostgreSQL은 스스로를 가장 진보된 오픈소스 데이터베이스 플랫폼이라고 홍보하며, 데비안(Debian) 리눅스에는 이를 더욱 복잡하게 만들 수 있는 다양한 패키지들이 존재합니다. 우분투 서버나 여러 우분투 파생 배포판을 사용하는 경우에도 데비안 코어를 기반으로 하기 때문에 PostgreSQL 관련 패키지를 손쉽게 찾을 수 있습니다. 하지만 이러한 높은 복잡성과 방대한 개발 생태계 때문에 "could not connect to server"와 "no such file or directory" 같은 경고 메시지가 더욱 골칫거리가 되곤 합니다.

다행히 이러한 문제는 대부분 권한 문제에서 비롯됩니다. PostgreSQL은 postgres라는 이름의 사용자가 해당 디렉터리를 소유하도록 요구하기 때문입니다. 간단한 명령어 한 줄로 거의 즉시 해결할 수 있으며, 다만 실제 원인이 맞는지 확인하기 위해 몇 가지 기본적인 진단 절차를 먼저 거치는 것이 좋습니다.

PostgreSQL 서버 연결 오류 수정하기

먼저 PostgreSQL 서비스를 수동으로 재시작해 보세요. 때로는 이것만으로도 문제가 해결되며, 그렇지 않더라도 오류 메시지를 통해 단서를 얻을 수 있습니다. 대부분의 경우 postgres 사용자로 psql 명령을 실행하여 시스템을 재시작하게 됩니다.

이 과정에서 문제가 깔끔하게 해결될 수도 있습니다. 그렇지 않다면 "psql: could not connect to server: No such file or directory"라는 메시지가 출력되는데, 이는 권한 문제가 있다는 신호입니다. 이 오류 메시지를 받으면 추가적인 텍스트도 함께 출력됩니다.

이 메시지가 나타나면 모듈이 제대로 로드되었는지 확인하기 위해 서비스 상태를 점검하세요. 정상적으로 로드되어 있어야 하며, 그렇지 않다면 재시작이 필요할 수 있습니다. "Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)"라는 메시지가 보이면 서비스가 실행 중인 것입니다. sudo service postgresql restart 명령으로 잠시 재시작하여 문제가 해결되는지 확인해 볼 수 있습니다. 대부분의 경우 해결되지 않지만, 시도해 볼 만한 가치는 있습니다.


그래도 해결되지 않았다면 PostgreSQL 로그 파일을 열어 오류 내용을 확인해 보세요. 드물게 패키지 오류와 관련된 내용이 발견되면 SQL 모듈 중 하나가 누락되었을 가능성이 있습니다. 이것이 흔한 원인은 아니지만, 확인해 보는 것이 나쁠 것은 전혀 없습니다. 대부분의 경우 "Permissions should be u=rwx (0700)"이라는 경고와 함께

"data directory \"/var/lib/postgresql/9.6/main\" has group or world access"라는 메시지를 발견하게 됩니다. 사용 중인 SQL 서버 버전에 따라 버전 번호는 다르게 표시될 수 있습니다.

이는 데비안 및 유사 배포판에서 보안상의 이유로 postgres 사용자와 그룹이 해당 디렉터리를 0700 권한으로, 그 안의 모든 파일을 0600 권한으로 제어해야 한다고 가정하기 때문입니다. 터미널에서 다음 명령을 실행하여 권한을 수정할 수 있습니다:

sudo chown -R postgres:postgres /var/lib/postgresql/9.6/ && sudo chmod -R u=rwX,go= /var/lib/postgresql/9.6/

파일 권한 옵션을 설정하는 특수한 방식 때문에, 익숙한 소문자 x가 아닌 대문자 X를 사용해야 한다는 점에 유의하세요. 이 작업에는 루트(root) 권한이 필요하지만, sudo를 포함시켰기 때문에 일반 사용자로 실행하면서도 적절한 권한을 얻을 수 있습니다. 우분투와 우분투 기반의 다양한 리눅스 배포판은 기본 루트 계정을 비활성화해 두었기 때문에 반드시 이러한 방식으로 작업해야 합니다.

명령 실행이 완료되면 터미널에서 sudo service postgresql restart 명령으로 서비스를 다시 시작하세요. 이번에는 오류 없이 정상적으로 연결될 것입니다. 로그를 다시 확인해 보면 권한 문제와 관련된 경고 메시지도 사라진 것을 확인할 수 있습니다.

이 오류는 비교적 특정한 조건에서 발생하기 때문에, 처음 한 번 수정하고 나면 PostgreSQL 디렉터리의 권한을 직접 조작하지 않는 한 다시 발생하지 않습니다. 애초에 이 문제를 해결하는 경우 외에는 권한을 직접 변경할 필요가 있는 상황은 거의 없습니다.

저자 소개

케빈 애로우즈(Kevin Arrows)

케빈 애로우즈는 10년 이상의 업계 경험을 지닌 베테랑 기술 전문가입니다. Microsoft Certified Technology Specialist(MCTS) 자격증을 보유하고 있으며, 최신 기술 동향을 끊임없이 학습하는 데 큰 열정을 가지고 있습니다. 소프트웨어 개발, 사이버 보안, 클라우드 컴퓨팅 등 다양한 기술 분야에 걸쳐 폭넓게 집필해 왔으며, 복잡한 기술 개념을 명확하고 간결하게 설명하는 능력으로 동료들의 인정과 존경을 받고 있습니다.