Jeg installerte Bitnami Django stack, som inkluderte PostgreSQL 8.4.
Når jeg kjører psql -U postgres
får jeg følgende feil:
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 kjører definitivt, og filen pg_hba.conf
ser slik ut:
# 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
Hva er det som skjer?
Bevis på at pg kjører:
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#
Feilmeldingen refererer til en socket på et Unix-domene, så du må tilpasse netstat
-oppkallingen slik at den ikke ekskluderer dem. Prøv uten opsjonen -t
:
netstat -nlp | grep 5432
Jeg vil tro at serveren faktisk lytter på socket /tmp/.s.PGSQL.5432
i stedet for /var/run/postgresql/.s.PGSQL.5432
som klienten forsøker å koble til. Dette er et typisk problem ved bruk av håndkompilerte eller tredjeparts PostgreSQL-pakker på Debian eller Ubuntu, fordi standardkatalogen for socket-katalogen for Unix-domenet er /tmp
, men Debian-pakkene endrer den til /var/run/postgresql
.
Mulige løsninger:
/opt/djangostack-1.3-0/postgresql/bin/psql
). Eventuelt avinstaller Ubuntu-pakken helt (kan være vanskelig på grunn av andre omvendte avhengigheter).-H localhost
for å koble til via TCP/IP i stedet.-h /tmp
eller tilsvarende PGHOST
-innstilling for å peke på riktig katalog.Du kan bruke psql -U postgres -h localhost
for å tvinge tilkoblingen til å skje over TCP i stedet for UNIX-domenesokler; netstat
-utdataene viser at PostgreSQL-serveren lytter på localhost's port 5432.
Du kan finne ut hvilken lokal UNIX-socket som brukes av PostgreSQL-serveren ved å bruke en annen invokasjon av netstat:
netstat -lp --protocol=unix | grep postgres
Grensesnittene som PostgreSQL-serveren lytter til, er uansett konfigurert i postgresql.conf
.