Warum startet PostgreSQL 9.3 unter Ubuntu nicht?


13

Ich habe PostgreSQL 9.3 erfolgreich aus dem APT-Repository auf 2 VMs installiert, auf denen Ubuntu 12.04 und 13.04 ausgeführt werden. Es ist jedoch nicht möglich, PostgreSQL 9.3 ordnungsgemäß auf meinem Hostcomputer zu installieren, auf dem Ubuntu 12.04 ausgeführt wird.

Die Installation (dieses Mal) scheint in Ordnung zu sein, aber vielleicht gibt es einen Fehler, den ich nicht verstehe:

* No PostgreSQL clusters exist; see "man pg_createcluster"
Setting up postgresql-9.3 (9.3.0-2.pgdg12.4+1) ...
Creating new cluster 9.3/main ...
  config /etc/postgresql/9.3/main
  data   /var/lib/postgresql/9.3/main
  locale en_US.UTF-8
  port   5432
update-alternatives: using /usr/share/postgresql/9.3/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode.

Also versuche ich mich als PostgreSQL-Benutzer hinzuzufügen, aber ich bekomme folgendes:

createuser: could not connect to database postgres: 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"?

Ich kann nicht sehen, dass PostgreSQL im Systemmonitor ausgeführt wird, und es befindet sich keine Datei im Ordner / var / run / postgresql / ... vollständig leer.

BEARBEITEN: Auf den VMs befindet sich eine Datei in / var / run / postgresql / mit dem Namen 9.3-main.pid

In der Protokolldatei des Hostcomputers befindet sich / var / log / postgresql nichts

Also ... was ist hier los, was nicht in meinen VMs los ist? Wie gesagt, die anderen Installationen auf den VMs, einschließlich PostGIS und PGAdmin, waren perfekt ... keine Ahnung, warum dieser Hostcomputer nicht läuft ...


Hast du eigentlich ein /var/run/postgresqlVerzeichnis? Irgendwann nach erfolgreicher Installation fehlte dieser Ordner auf meinem Computer. Was sagt die Konfiguration über das zu verwendende Verzeichnis?
Colin 't Hart

@ Colin'tHart Ich habe dieses Verzeichnis ... aber es ist nichts drin ... In den VMs ist eine Datei namens 9.3-main.pid erstellt. Wo finde ich diese Konfigurationsinformationen?
DPSSpatial

postgresql.confim config-verzeichnis, das laut obiger angabe ist /etc/postgresql/9.3/main. Sie sollten auch in den Protokolldateien nachsehen, wahrscheinlich in /var/log/postgresql.
Colin 't Hart

@ Colin'tHart Die Protokolldatei ist leer ... Die Konfigurationsdatei - und ich denke, das ist, wonach Sie suchen - sagt # Wenn external_pid_file nicht explizit festgelegt ist, wird keine zusätzliche PID-Datei geschrieben. external_pid_file = '/var/run/postgresql/9.3-main.pid'
DPSSpatial

Befindet sich in diesem Verzeichnis eine Socket-Datei oder ist sie wirklich vollständig leer?
Colin 't Hart

Antworten:


16

Meine Ländereinstellungen wurden bei der Installation von PostgreSQL nicht richtig konfiguriert. Bereinigen und erneutes Installieren hat nicht geholfen. Ich habe die Anweisungen hier befolgt und das hat den Trick für mich getan.

Wesentliche Teile der verlinkten Informationen sind nachfolgend wiedergegeben:

Das Problem zeigte sich auf folgende Weise:

warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
...
are supported and installed on your system.

Das erste Problem war sehr einfach zu lösen, indem Folgendes ausgeführt wurde:

#dpkg-reconfigure locales

... und die bevorzugten Locations auswählen.

Aber danach weigerte sich PostgreSQL immer noch zu starten. Dies ist auf die Tatsache zurückzuführen, dass der Installationsprozess während der Installation versucht hat, einen Cluster zu erstellen, dies jedoch aufgrund der schlechten Gebietsschemata nicht getan wurde. Also müssen wir diesen Schritt wiederholen, indem wir Folgendes ausführen:

#pg_createcluster 9.3 main --start

(Für die 9.3-Version von PostgreSQL)

Nach diesem Schritt startet PostgreSQL einwandfrei über

#/etc/init.d/postgresql start

2
Ich habe mein Leben gerettet. Es ist wirklich bescheuert, dass das Löschen und erneute Installieren nicht hilft, selbst wenn das Gebietsschema korrigiert wird. Dies verschwendete 2 Stunden meines Lebens :(
Escher

Für den Fall , pg_createclusterSie sagt , dass der Cluster bereits vorhanden Sie es zuerst fallen müssen (dies wird alle Daten in sie löschen, so stellen Sie sicher , dass Sie eine Sicherungskopie): pg_dropcluster 9.3 main.
Florian Brucker

6

Hoffentlich haben Sie dieses Problem bereits gelöst, aber ich stoße auf ein ähnliches Problem, das eine andere Ursache zu haben scheint, und möglicherweise hilft meine Erfahrung, wenn Sie immer noch ein Problem haben.

Mein Problem mit 9.3 unter Ubuntu hängt damit zusammen, dass das Socket-Verzeichnis ein vorübergehendes Verzeichnis in / run ist. Grundsätzlich sollte das Skript init.d dafür sorgen, dass das Socket-Verzeichnis in / run / postgresql erstellt wird, wenn es während der Startaktion nicht vorhanden ist. Dies wird immer der Stand der Dinge nach einem Neustart sein.

Das Problem ist jedoch, dass das Skript init.d beendet wird, bevor die Startaktion ausgeführt wird, wenn das Socket-Verzeichnis nicht vorhanden ist. Dies liegt daran, dass der Aufruf von pg_lsclusters ohne das Socket-Verzeichnis fehlschlägt, was wiederum verhindert, dass die Startaktion jemals das Socket-Verzeichnis erstellt.

Ich habe nicht herausgefunden, was die beste Lösung ist, aber wenn ich die Logik zum Erstellen des Socket-Verzeichnisses von der Startaktion auf vor dem Aufruf von pg_lsclusters verlagere, kann ich den Server nach dem Neustart problemlos starten.

Hier ist der Teil der Startaktion, der das Erstellen des Socket-Verzeichnisses behandelt:

# create socket directory
if [ -d /var/run/postgresql ]; then
  chmod 2775 /var/run/postgresql
else
  install -d -m 2775 -o postgres -g postgres /var/run/postgresql
  [ -x /sbin/restorecon ] && restorecon -R /var/run/postgresql || true
fi

Ich werde ein Update veröffentlichen, wenn mir die Ursache dafür klar wird, da dies eindeutig nicht das erwartete Verhalten sein kann.

NACHTRAG:

Ich denke, der Grund, warum ich auf dieses Problem gestoßen bin, ist, dass ich keinen guten Wert für unix_socket_directories konfiguriert habe . In Version 9.2 war diese Konfigurationsoption unix_socket_directory, das ich entfernt habe, anstatt zu unix_socket_directories zu wechseln. Seit ich einen Wert für unix_socket_directories festgelegt habe, gab es keine Probleme mit dem Serverstart.


danke @ tdg5 !!! Ich habe das nicht gelöst, aber ich denke, es kommt auf mehrere fehlerhafte Installationen auf meinem Computer an. Die Installation vom PostgreSQL Apt Repository auf einer Neuinstallation von Ubuntu löste meine Probleme ...
DPSSpatial

3
@mapBaker - Ich habe meine Antwort aktualisiert, um die Grundursache des PG 9.3-Startproblems in meiner speziellen Situation zu berücksichtigen. Vielleicht hilft es Ihnen auch.
tdg5

1
Mein PG9.3 wurde nach dem Neustart nicht gestartet. Das Hinzufügen der Zeile "unix_socket_directories = '/ var / run / postgresql'" zu 9.3s postgresql.conf löste das Problem. Vielen Dank
Alfonx

Vielen Dank! Ich arbeite schon eine Weile daran und bin froh, dieses Nugget zu finden!
Serban Tanasa

3

Ich hatte mehrere Probleme mit der Sockets-Datei, in Ihrem Fall /var/run/postgresql/.s.PGSQL.5432

Stellen Sie sicher, dass das Verzeichnis / var / run / postgresql vorhanden und beschreibbar ist, bevor Sie postgresql starten. Weitere Informationen finden Sie in dieser Diskussion .

Wenn Sie eine Verbindung herstellen, verwenden Sie -h:

psql -h localhost 

und sehen, ob das es behebt.


1

Dies scheint das Problem unter Ubuntu zu beheben:

Postgresql.conf bearbeiten:

unix_socket_directories='/var/run/postgresql

Mach jetzt service postgresql start


1

Ich bin neu in PSQL, aber ich habe das Problem durch Bearbeiten von start.conf gelöst. Ich hatte die Einstellung "auto" kommentiert, um den Server manuell zu verwalten, aber es muss ein Wert angegeben werden: auto, manual oder disabled.

EGD.


1

Meiner Meinung nach ist das Startskript falsch. Die Konfigurationsdateien sind in /etc/postgresql/9.3/main installiert, aber das Skript /usr/share/postgresql-common/init.d-functions sucht in

for c in /etc/postgresql/"$2"/*; do 

Ersetzen Sie diese Zeile durch

for c in /etc/postgresql/"$2"/main; do

-2

Alle,

nach einigem graben habe ich hier eine lösung gefunden:

http://ubuntuforums.org/showthread.php?t=869080

Welche diese Anweisungen enthielten:

Im Terminal ausführen:

sudo mkdir -p /usr/local/pgsql/data
sudo chown -R postgres:postgres /usr/local/pgsql/
sudo su - postgres
cd /usr/lib/postgresql/9.3/bin/
./initdb -D /usr/local/pgsql/data
./postgres -D /usr/local/pgsql/data

Jetzt läuft mein Server !!!

BEARBEITEN : nach einem Neustart läuft der Server immer noch nicht ...

Alle Gedanken darüber, warum ich dies ausführen musste, sind willkommen!


Sind Sie sicher, dass 9.3 ausgeführt wird? Die Versionsnummer scheint verdächtig ...
Dezso

@dezso Entschuldigung, ich habe vergessen, die Versionsnummer zu ändern, als ich diese Befehle eingefügt habe ... das ist alles in Version 9.3 ...
DPSSpatial

Möglicherweise müssen Sie den Port angeben. Der Standardport wird von Ihrer alten Postgres-Installation verwendet. Ihre neue Installation verwendet höchstwahrscheinlich Port 5433, aber dies können Sie sicher überprüfen, indem Sie die postgresql-Konfigurationsdatei lesen:/etc/postgresql/9.3/main/postgresql.conf
user35581

1
Dies kann eine Problemumgehung sein, ist jedoch eindeutig keine gute Lösung. Dieser hier behebt
sorin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.