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#
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
:
netstat -nlp | grep 5432
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 gelijkwaardige PGHOST
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; uw netstat
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:
netstat -lp --protocol=unix | grep postgres
In ieder geval, de interfaces waarop de PostgreSQL server luistert zijn geconfigureerd in postgresql.conf
.