포트 5432에서 postgresql에 연결할 수 없습니다


82

PostgreSQL 8.4가 포함 된 Bitnami Django 스택 을 설치했습니다 .

실행할 때 psql -U postgres다음 오류가 발생합니다.

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

PG가 확실히 실행 중이며 pg_hba.conf파일은 다음과 같습니다.

# TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

무엇을 제공합니까?

pg가 실행중인 "증명":

root@assaf-desktop:/home/assaf# ps axf | grep postgres
14338 ?        S      0:00 /opt/djangostack-1.3-0/postgresql/bin/postgres -D /opt/djangostack-1.3-0/postgresql/data -p 5432
14347 ?        Ss     0:00  \_ postgres: writer process                                                                        
14348 ?        Ss     0:00  \_ postgres: wal writer process                                                                    
14349 ?        Ss     0:00  \_ postgres: autovacuum launcher process                                                           
14350 ?        Ss     0:00  \_ postgres: stats collector process                                                               
15139 pts/1    S+     0:00              \_ grep --color=auto postgres
root@assaf-desktop:/home/assaf# netstat -nltp | grep 5432
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      14338/postgres  
tcp6       0      0 ::1:5432                :::*                    LISTEN      14338/postgres  
root@assaf-desktop:/home/assaf# 

나는 당신이 무엇을 요구하는지 전혀 모르고 당신은 입력을 제공하지 않았습니다. 이것은 일반적인 오류가 발생하고 다른 것을보고하는 100 명의 사람들입니다. 사이트의 형식이 완전히 다릅니다.
Evan Carroll

답변:


87

이 문제는 postgres버전 번호없이 패키지 를 설치하면 발생 합니다. 하지만이 postgres설치됩니다 그것은 올바른 버전, 클러스터가 제대로 실행되지 않습니다를 설정하는 스크립트 될 것입니다; 포장 문제입니다.

당신이 마음에 드시면 postgres이 클러스터를 만들고 얻기 위해 실행할 수있는 스크립트가 postgres실행은. 그러나 더 쉬운 방법이 있습니다.

먼저 이전 postgres 설치를 제거하십시오. 문제는 현재 9.1에 있습니다. 따라서 설치 한 것으로 가정합니다.

sudo apt-get remove --purge postgresql-9.1

이제 간단히 재설치

sudo apt-get install postgresql-9.1

버전 번호가있는 패키지 이름을 적어 둡니다. HTH.


3
이것은 postgres 9.3에 도움이되었습니다.
sevenseacat

1
이 답변은 postgres 9.4 / ubuntu 14.10에서도 작동합니다.
Malte

1
이 답변은 postgres 9.4 및 9.3 믹스 업에 도움이되었습니다. 시원한.
ingo December

2
우분투 16.04와 postgres 9.5에서 일했지만 모든 postgres 관련 패키지를 먼저 제거해야했습니다 .
Evert

2
이것은 정말 멋진 답변입니다! 또한 postgres 측의 끔찍한 사용자 경험
user1952500

23

오류 메시지는 유닉스 도메인 소켓을 참조하므로 netstat제외하지 않으 려면 호출을 조정해야 합니다. 옵션없이 시도하십시오 -t:

netstat -nlp | grep 5432

클라이언트가 연결하려고하는 /tmp/.s.PGSQL.5432것이 아니라 서버가 실제로 소켓에서 수신 대기 하고 /var/run/postgresql/.s.PGSQL.5432있다고 생각합니다. 이것은 유닉스 도메인 소켓 디렉토리의 소스 기본값 /tmp이 데비안 패키징에서로 변경 되기 때문에 데비안 또는 우분투에서 수동 컴파일 또는 타사 PostgreSQL 패키지를 사용할 때 발생하는 일반적인 문제 /var/run/postgresql입니다.

가능한 해결 방법 :

  • 타사 패키지에서 제공 한 클라이언트를 사용하십시오 (call /opt/djangostack-1.3-0/postgresql/bin/psql). 우분투 제공 패키지를 모두 제거 할 수 있습니다 (다른 역 종속성으로 인해 어려울 수 있음).
  • 타사 패키지의 소켓 디렉토리가 Debian / Ubuntu와 호환되도록 수정하십시오.
  • -H localhost대신 TCP / IP를 통해 연결하는 데 사용하십시오 .
  • 올바른 디렉토리를 가리 키려면 -h /tmp이와 동등한 PGHOST설정을 사용하십시오 .
  • 타사 패키지를 사용하지 마십시오.

19

이것은 나를 위해 작동합니다 :

편집 : postgresql.conf

sudo nano /etc/postgresql/9.3/main/postgresql.conf

활성화 또는 추가 :

listen_addresses = '*'

데이터베이스 엔진을 다시 시작하십시오.

sudo service postgresql restart

또한 파일을 확인할 수 있습니다 pg_hba.conf

sudo nano /etc/postgresql/9.3/main/pg_hba.conf

네트워크 또는 호스트 주소를 추가하십시오.

host    all             all             192.168.1.0/24          md5

listen_address = '*'트릭을 만들었습니다. "localhost"에서만 청취하고 127.0.0.1에서는 청취하지 않았습니다. 감사합니다!
mwm

내 신은 ... 마지막으로 효과가 있었는데, 주소와 주석 처리되지 않은 listen_address를 추가 할 때까지는 아무것도 작동하지 않았다.
AntonB

하나 추가! 그것은 나를 위해 일했다.
Atul Makwana

1
이것은 우분투 윈도우 bash에서 작동합니다.
ahmadalibaloch

Windows 10의 Ubuntu Server 명령 bash에서 작동하는지 확인할 수 있습니다.
Ronald

18

psql -U postgres -h localhostUNIX 도메인 소켓 대신 TCP를 통해 연결을 강제 실행하는 데 사용할 수 있습니다 . 당신의 netstat출력은 PostgreSQL 서버가 로컬 호스트의 포트 5432에서 수신 대기하는 것을 보여줍니다.

netstat 의 다른 invocavtion을 사용하여 PostgrSQL 서버에서 사용되는 로컬 UNIX 소켓을 찾을 수 있습니다 .

netstat -lp --protocol=unix | grep postgres

여하튼 PostgreSQL 서버가 수신하는 인터페이스는에서 구성됩니다 postgresql.conf.


17

다음과 같이 소프트 링크를 만드십시오.

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

1
이것은 저에게 효과적이며 postgresql 구성을 변경하지 않고도 가장 쉬운 솔루션 인 것처럼 보였습니다. 링크를 만들 때 수퍼 유저인지 확인하십시오.
brendan

2
ln : 심볼릭 링크 '/var/run/postgresql/.s.PGSQL.5432'를 만들지 못했습니다 : 파일이 있습니다
P_M

/ var / run / 디렉토리에 "postgresql"폴더를 만들었습니다. 존재하지 않았습니다.
Ikrom

놀라운 효과가 있는데, 그 이유는 무엇입니까?
Teoman shipahi

7

나는 이것을함으로써 그것을 작동시킨다 :

dpkg-reconfigure locales

원하는 로케일을 선택한 다음 실행

pg_createcluster 9.5 main --start

(9.5는 postgresql의 내 버전입니다)

/etc/init.d/postgresql start

그런 다음 작동합니다!

sudo su - postgres
psql

아, 죄송합니다. 명령이 명확하다고 생각합니다. 나를 위해, postgresql을 다시 설치할 때이 문제가 발생합니다. 유형별로 다시 시작하려고 service postgresql restart 하지만 postgresql 클러스터가 없다고 말합니다. 그런 다음 나를 도울 수있는이 방법을 찾으십시오 :)
mymusise

3 시간의 인터넷 검색 후 마침내 내 문제가 해결되었습니다. dpkg-reconfigure locales꽤 중요하다.
Don Mums

5

OpenACS를 기반으로하며 최신 버전의 PostgreSQL에서는 실행되지 않는 Project Open을 사용하고 있기 때문에 Debian Squeeze에서 PostgreSQL 8.1을 컴파일해야했습니다.

기본 컴파일 구성은 unix_socketin /tmp을 넣지 만 PostgreSQL을 사용하는 Project Open은 unix_socketat을 찾기 때문에 작동하지 않습니다 /var/run/postgresql.

설정에서이 postgresql.conf소켓의 위치를 설정하기는. 내 문제는 중 내가 설정 수 있었다 /tmppsql작동했지만 열려있는 프로젝트되지 않았거나 내가 그것을 설정할 수 /var/run/postgresqlpsql작동하지 않을 것입니다하지만 프로젝트 오픈했다.

이 문제에 대한 한 가지 해결책은 Peter의 제안에 따라 소켓을 설정 /var/run/postgresql한 다음 실행 psql하는 것입니다.

psql -h /var/run/postgresql

로컬 권한을 사용하여 로컬로 실행됩니다. 유일한 단점은 단순히 "psql"보다 타이핑이 더 많다는 것입니다.

누군가가 제안한 다른 제안은 두 위치 사이에 상징적 인 링크를 만드는 것이 었습니다. 이것도 효과가 있었지만 재부팅하면 링크가 사라졌습니다. -h 인수를 사용하는 것이 더 쉬울 수도 있지만 PostgreSQL 스크립트 내에서 심볼릭 링크를 만들었습니다 /etc/init.d. "start"섹션에 symbolic link create 명령을 넣었습니다. 물론 stop 및 start 또는 restart 명령을 실행하면 기존 심볼릭 링크를 다시 만들려고 시도하지만 경고 메시지 이외의 경우에는 아무런 해가 없습니다.

내 경우에는 다음 대신 :

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

나는 가지고있다

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

unix_socket을 /var/run/postgresql/.s.PGSQL.5432in 으로 명시 적으로 설정 했습니다 postgresql.conf.


3

해결책:

이 작업을 수행

export LC_ALL="en_US.UTF-8"

이. ( 9.3 은 현재 PostgreSQL 버전입니다. 버전을 작성하십시오!)

sudo pg_createcluster 9.3 main --start

woooow, 그것은 내 문제를 해결하는 유일한 방법이었습니다. 감사합니다.
user3687723

3

Postgres 서비스가 오류없이 가동되어 실행 중이거나 Postgres 서비스 시작시 오류가 없는데도 여전히 언급 된 오류가 발생하는 경우 다음 단계를 수행하십시오

1 단계 : Running pg_lsclusters은 기기에서 실행중인 모든 postgres 클러스터를 나열합니다.

예 :

Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

아마도 귀하의 경우와 postgres 서비스에서 상태가 다운 될 것입니다

2 단계 : pg_ctlcluster 다시 시작

#format is pg_ctlcluster <version> <cluster> <action>
sudo pg_ctlcluster 9.6 main start

#restart postgres
sudo service postgres restart

3 단계 : 2 단계 실패 및 오류 발생

이 프로세스가 성공하지 못하면 오류가 발생합니다. 당신은 오류 로그온을 볼 수 있습니다/var/log/postgresql/postgresql-9.6-main.log

내 오류는 :

FATAL: could not access private key file "/etc/ssl/private/ssl-cert-snakeoil.key": Permission denied
Try adding `postgres` user to the group `ssl-cert`

4 단계 : postgres의 소유권 확인

postgres그 소유자 인지 확인하십시오/var/lib/postgresql/version_no/main

그렇지 않으면 실행

sudo chown postgres -R /var/lib/postgresql/9.6/main/

5 단계 : postgres 사용자가 ssl-cert 사용자 그룹에 속하는지 확인

Postgres 사용자를 ssl-cert그룹 에서 잘못 제거 한 것으로 나타났습니다 . 아래 코드를 실행하여 사용자 그룹 문제를 해결하고 권한을 수정하십시오.

#set user to group back with
sudo gpasswd -a postgres ssl-cert

# Fix ownership and mode
sudo chown root:ssl-cert  /etc/ssl/private/ssl-cert-snakeoil.key
sudo chmod 740 /etc/ssl/private/ssl-cert-snakeoil.key

# now postgresql starts! (and install command doesn't fail anymore)
sudo service postgres restart

2

제 경우에는 편집 중에 만든 오타로 인해 발생했습니다. /etc/postgresql/9.5/main/pg_hba.conf

나는 바꿨다 :

# Database administrative login by Unix domain socket
local   all             postgres                                peer

에:

# Database administrative login by Unix domain socket
local   all             postgres                                MD5

그러나 MD5소문자 여야했습니다 md5.

# Database administrative login by Unix domain socket
local   all             postgres                                md5

1
이것은 나를 위해 그것을 고정 답변입니다 :) 나는 이전에 광산을 변경했다 trusted대신 trust하고 서비스를 다시 시작하지 않았고, 나는 이미 내가 변경 잊었 경우에만 다음날 파산
Phlippie 보스만

2

Postgres 제거가 설득력이 없다는 것을 알았습니다. 이것은 내 문제를 해결하는 데 도움이됩니다.

  1. postgres 서버를 시작하십시오 :

    sudo systemctl start postgresql
    
  2. 서버가 부팅시 시작되는지 확인하십시오.

    sudo systemctl enable postgresql
    

자세한 내용은 DigitalOcean 사이트를 참조하십시오 .


2

postgres-9.5 서버에서이 문제를 해결하지 못했습니다. 이 사이트와 다른 사이트에서 수정의 모든 순열을 시도하는 3 일 동안 제로 진행 후 서버를 다시 설치하기로 결정하고 5 일 분량의 작업을 잃었습니다. 그러나 새 인스턴스에서 문제를 복제했습니다. 이것은 내가 한 치명적인 접근 방식을 취하기 전에 문제를 해결하는 방법에 대한 관점을 제공 할 수 있습니다.

먼저 postgresql.conf에서 모든 로깅 설정을 비활성화하십시오. 이것은 섹션입니다 :

# ERROR REPORTING AND LOGGING

해당 섹션의 모든 내용을 주석 처리하십시오. 그런 다음 서비스를 다시 시작하십시오.

다시 시작할 때 사용 /etc/init.d/postgresql start 하거나 restart 다시 시작하는 동안 수퍼 유저 모드에있는 것이 도움이되었습니다. 그 작업을 위해 x 창을 열었습니다. 로 수퍼 유저 모드를 설정할 수 있습니다 sudo -i.

이 간단한 명령으로 서버에 도달 할 수 있는지 확인하십시오. psql -l -U postgres

그래도 해결되지 않으면 다음을 고려하십시오.

솔루션을 찾으려고하면서 많은 폴더의 소유권을 변경하고있었습니다. 폴더 소유권 chmod을 2 일 더 되돌리려 고했을 것입니다 . 해당 폴더 소유권을 이미 잃어 버렸고 서버를 완전히 제거하지 않으려는 경우 영향을받는 모든 폴더의 설정 추적을 시작하여 원래 상태로 되 돌리십시오. 다른 시스템에서 병렬 설치를 시도하고 모든 폴더의 소유권과 설정을 체계적으로 확인하려고 할 수 있습니다. 지루하지만 데이터에 액세스 할 수 있습니다.

액세스 권한을 얻은 후에 # ERROR REPORTING AND LOGGINGpostgresql.conf파일 섹션 에서 각 관련 줄을 체계적으로 변경 하십시오. 다시 시작하고 테스트하십시오. 로그의 기본 폴더가 실패의 원인임을 발견했습니다. 나는 구체적으로 언급했다 log_directory. 그러면 시스템에서 로그를 삭제하는 기본 폴더는 /var/log/postgresql입니다.


1

/var/lib/postgresql/9.3/main폴더 의 권한을 변경했기 때문에 발생했을 수 있습니다 .

아래 명령을 사용하여 700으로 변경하십시오.

sudo chmod 700 main

1

이것은 Flask를 사용하고 있기 때문에 질문과 정확히 관련이 없지만 이것은 내가 얻은 정확한 오류이며 아이디어를 얻는 데 가장 관련이있는 스레드였습니다.

내 설정 : Linux 용 Windows 하위 시스템, makeer / dockerfile 포함 Docker-compose, Flask, Postgresql (테이블로 구성된 스키마 사용)

postgres에 연결하려면 다음과 같이 연결 문자열을 설정하십시오.

from flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "postgresql+psycopg2://<user>:<password>@<container_name_in_docker-compose.yml>/<database_name>"

참고 :이 스레드의 메소드를 사용하여 작동 할 IP (예 : localhost, 127.0.0.1)를 얻지 못했습니다. localhost 대신 컨테이너 이름을 사용하는 아이디어는 여기에서 가져 왔습니다. https://github.com/docker-library/postgres/issues/297

스키마를 설정하십시오.

from sqlalchemy import MetaData
db = SQLAlchemy(app, metadata=MetaData(schema="<schema_name>"))

세션을 설정할 때 기능의 검색 경로를 설정하십시오.

db.session.execute("SET search_path TO <schema_name>")

0

Peter Eisentraut가 묘사 한 것과 똑같은 문제가있었습니다. netstat -nlp | grep 5432명령을 사용하여 서버가 소켓에서 수신 대기 중임을 알 수 있습니다 /tmp/.s.PGSQL.5432.

이 문제를 해결하려면 postgresql.conf파일을 편집 하고 다음 줄을 변경하십시오.

listen_addresses = '*'
unix_socket_directories = '/var/run/postgresql'

이제 실행하고 service postgresql-9.4 restart(9-4를 해당 버전으로 교체) 원격 연결이 작동해야합니다.

이제 로컬 연결을 허용하려면 /var/run/postgresql디렉토리에 대한 기호 링크를 작성하십시오 .

ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432

당신 pg_hba.conf도 올바르게 구성되어 있는지 확인하는 것을 잊지 마십시오 .


0

내 경우에는 내가해야 할 일은 다음과 같습니다.

sudo service postgresql restart

그리고

sudo -u postgres psql

이것은 잘 작동했습니다. 도움이 되길 바랍니다. 건배 :).



0

나는 같은 문제가 있었다 (Ubuntu 15.10 (wily)). sudo find / -name 'pg_hba.conf' -print또는 sudo find / -name 'postgresql.conf' -print비어있었습니다. 그 전에 postgresql의 여러 인스턴스가 설치되어있는 것처럼 보였습니다.

설치된 것으로 보았을 때 비슷하거나 종속성 문제가있을 수 있습니다.

.../postgresql
.../postgresql-9.x 

등등.

이 경우 sudo apt-get autoremove각 패키지를 1 x 1로 포장 해야합니다 .

그런 다음 편지를 따라 가면 괜찮을 것입니다. 특히 키를 가져 와서 소스 목록에 추가 할 때

sudo apt-get update && sudo apt-get -y install python-software-properties && wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

책략이 사용하지 않는 경우, 교체 wily의 출력 즉, 귀하의 출시와 함께lsb_release -cs

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ wily-pgdg main" >> /etc/apt/sources.list.d/postgresql.list'
sudo apt-get update && sudo apt-get install postgresql-9.3 pgadmin3

그리고 당신은 잘하고 연결하고 사용자를 만들 수 있어야합니다.

예상 출력 :

Creating new cluster 9.3/main ...
config /etc/postgresql/9.3/main
data   /var/lib/postgresql/9.3/main
locale en_US.UTF-8
socket /var/run/postgresql
port   5432

내 솔루션 출처 (신용)


0

같은 문제가있는 동안 나는 다른 것을 시도했다.

postgresql 데몬을 수동으로 시작하면 다음과 같습니다.

FATAL:  could not create shared memory segment ...
   To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's
   shared memory usage, perhaps by reducing shared_buffers or max_connections.

그래서 내가 한 것은 대한 하한 설정했다 shared_buffersmax_connectionspostgresql.confrestart서비스를.

이것은 문제를 해결했습니다!

전체 오류 로그는 다음과 같습니다.

$ sudo service postgresql start
 * Starting PostgreSQL 9.1 database server                                                                                                                                                               * The PostgreSQL server failed to start. Please check the log output:
2013-06-26 15:05:11 CEST FATAL:  could not create shared memory segment: Invalid argument
2013-06-26 15:05:11 CEST DETAIL:  Failed system call was shmget(key=5432001, size=57237504, 03600).
2013-06-26 15:05:11 CEST HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 57237504 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.
    If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
    The PostgreSQL documentation contains more information about shared memory configuration.

0

많은 노력을 기울인 후에 다른 게시물을 기반으로 솔루션을 찾았습니다!

dpkg -l | grep postgres
apt-get --purge remove <package-founded-1> <package-founded-2>
whereis postgres
whereis postgresql
sudo rm -rf <paths-founded>
sudo userdel -f postgres

0

run 내부에 postgresql 디렉토리를 생성 한 후 다음 명령을 실행하십시오.

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

0

/ tmp unix_socket_directories를 추가하기 만하면됩니다.

postgresql.conf

unix_socket_directories = '/var/run/postgresql,/tmp'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.