Dienstag Nov. 14, 2006

POSTGRESQL: Address already in use

Neulich eine PostgreSQL 8.1.5 auf einem alten SuSE SLES 8 System (ging einfach nicht anders...) aufgesetzt. Kompiliern & Co. funktionierte ganz gut, aber beim Starten der DB kam im Log folgende Meldung:

LOG: could not bind IPv4 socket: Address already in use
HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry.

Ah ja... Sehr schön. Was das jetzt? Weder netstat -tlpn, netstat -na noch lsof deuteten darauf hin, das noch eine Postmaster-Instanz lief noch das ein anderes Programm auf dem Port hängt. Des Rätsels Lösung fand ich dann im Post Bogus bind() warnings. Wieder mal Ärger mit IPv6. Wer IPv6 nicht braucht, sollte es gleich ganz abschalten. Immer wieder gibt's mit dem Dreck Probleme. Nun... Problem im eigentlichen Sinne war es gar keins. Mit netstat -tlpn sah ich zwar, das in der IPv6 Sektion auf Port 5432 der Postmaster gebunden war, aber nicht in der IPv4 Sektion. Der Witz ist, das das aber trotzdem der Fall ist. Wenn man nämlich einfach mal telnet localhost 5432 ausprobiert (vorausgesetzt die PostgreSQL hört darauf), dann meldet sich dort tatsächlich die Postgres. Die Meldung ist also irreführend. Der entscheidende Hinweis ist eigentlich der:

Note: This might fail on some OS's, like Linux older than 2.4.21-pre3, that don't have the IPV6_V6ONLY socket option, and map ipv4 addresses to ipv6. It will show ::ffff:ipv4 for all ipv4 connections.

Das führt dann z.B. auch dazu, das man für IPv4-Adressen in der pg_hba.conf IPv6-Einträge machen muss z.B.:

host    all         all         ::ffff:192.168.119.1/128 trust

Kommentare:

Senden Sie einen Kommentar:
  • HTML Syntax: Ausgeschaltet