Kan geen verbinding maken met postgresql op poort 5432
Ik installeerde de Bitnami Django stack die PostgreSQL 8.4 bevatte.
Wanneer ik psql -U postgres
uitvoer krijg ik de volgende foutmelding:
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 draait wel degelijk en het pg_hba.conf
bestand ziet er zo uit:
# 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
Wat is er?
"Bewijs" dat pg draait:
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#
83
3
De foutmelding verwijst naar een Unix-domain socket, dus u moet uw
netstat
aanroep aanpassen om deze niet uit te sluiten. Probeer het dus zonder de optie-t
:Ik zou denken dat de server eigenlijk luistert op de socket
/tmp/.s.PGSQL.5432
in plaats van de/var/run/postgresql/.s.PGSQL.5432
waar uw client verbinding mee probeert te maken. Dit is een typisch probleem bij het gebruik van hand-gecompileerde PostgreSQL pakketten of PostgreSQL pakketten van derden op Debian of Ubuntu, omdat de broncode standaard voor de Unix-domein socket directory/tmp
is, maar de Debian packaging verandert het in/var/run/postgresql
.Mogelijke workarounds:
/opt/djangostack-1.3-0/postgresql/bin/psql
aan). Verwijder eventueel de door Ubuntu meegeleverde pakketten helemaal (kan moeilijk zijn vanwege andere omgekeerde afhankelijkheden).-H localhost
om in plaats daarvan via TCP/IP te verbinden.-h /tmp
of een gelijkwaardigePGHOST
instelling om naar de juiste directory te verwijzen.U kunt
psql -U postgres -h localhost
gebruiken om de verbinding over TCP te forceren in plaats van UNIX domein sockets; uwnetstat
uitvoer laat zien dat de PostgreSQL server luistert op localhost's poort 5432.U kunt uitvinden welke lokale UNIX socket wordt gebruikt door de PostgrSQL server door een andere invocavtie van netstat te gebruiken:
In ieder geval, de interfaces waarop de PostgreSQL server luistert zijn geconfigureerd in
postgresql.conf
.Maak gewoon een softlink zoals deze: