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# 

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:

  • Gebruik de clients die worden geleverd door uw pakket van derden (roep /opt/djangostack-1.3-0/postgresql/bin/psql aan). Verwijder eventueel de door Ubuntu meegeleverde pakketten helemaal (kan moeilijk zijn vanwege andere omgekeerde afhankelijkheden).
  • Repareer de socket directory van het pakket van derden om compatibel te zijn met Debian/Ubuntu.
  • Gebruik -H localhost om in plaats daarvan via TCP/IP te verbinden.
  • Gebruik -h /tmp of een gelijkwaardige PGHOST instelling om naar de juiste directory te verwijzen.
  • Gebruik geen pakketten van derden.
Commentaren (0)

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.

Commentaren (0)

Maak gewoon een softlink zoals deze:

ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
Commentaren (4)