PostgreSQL, Debian und Unix sockets

Mal wieder ein Beitrag aus der Rubrik: Darauf muss man erst mal kommen.

Wer unter Debian mit einer PostgreSQL-Datenbank arbeitet, installiert sich diese im allgmeinen über apt-get. Problematisch wird es allerdings wenn man eine schon installierte Version durch eine selbstcompilierte Version (z.B die 7er Version aus Sarge durch die 8er) ersetzten will. Hat man nämlich die neue PostgreSQL-Version installiert und, um die Ausfallzeit zu verkürzen, danach die alte Version via apt-get remove deinstalliert hagelt es aus diversen Ecken Fehler:

Is the server running locally and accepting
connections on Unix domain socket "/var/run/.s.PGSQL.5432"?

Ok, jeder der sich etwas mit der Docu auseinandergesetzt hat, wird sagen "dafür gibt es doch unix_socket_directory in der postgresql.conf". Das dachte ich auch, und änderte die dortige Einstellung. Das war´s dann wohl .. könnte man meinen .. aber falsch gedacht.

Grund für die Fehlermeldung ist nämlich die Shared Library libpgsql2.1 bzw Static Library libpq.a. Wurde die Libary via apt-get installiert (was wahrscheinlich ist), sucht diese den Socket unter /var/run/postgresql. Installiert man PostgreSQL nicht aus einem Debian-Paket, so wird der Default-Sockte-Pfad (/tmp) aktiv. Setzt man in der postgresql.conf nun den Pfad zum Unix Socket Directory auf /var/run/postgresql läuft zwar einiges wieder (hauptsächlich Pakete die von Debian direkt kommen), per Source selbstcompilierte Software und auch PostgreSQL selber suchen aber nun den Socket unter /tmp und quitieren Aufrufe mit Fehlern ala:

Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Nun hat man 2 Möglichkeiten:

– zum einen die besagte Libary libpgsql2.1 durch eine selbstcompilierte Version ersetzen (im Idealfall also auch ein Dummy-Paket bauen)
– zum anderen einfach Symbolic Links für die Fehlende SocketFile und Ihre .lock File setzen.

Ich persönlich habe mich (auch aus Zeitgründen) für den zweiten Weg entschieden und mit

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

das Problem aus der Welt geschaft.

2 thoughts on “PostgreSQL, Debian und Unix sockets

Comments are closed.