it-swarm.com.de

postgresql Installation: initdb Datenverzeichnis nicht leer?

Ich versuche die Postgresql-Datenbank zu erstellen.

Bei der Installation von PostgreSQL habe ich folgenden Befehl gegeben:

Sudo yum install postgresql postgresql-server

und später habe ich die Konfigurationsdatei geändert:

Sudo vim /var/lib/pgsql/data/pg_hba.conf

und modifiziert als

local   all         all                               trust
Host    all         all         127.0.0.1/32          trust
Host    all         all         ::1/128               trust
Host    all         all         0.0.0.0/0             md5

Während ich versuche, den postgresql-Dienst zu starten:

Sudo service postgresql initdb

> Data directory is not empty!                               [FAILED]

Sudo chkconfig postgresql on

Sudo service postgresql start

Starting postgresql service:                               [  OK  ]

Was verursacht diese Fehler und wie behebe ich sie?

17
sridhar

Initdb sollte nur einmal ausgeführt werden. Es wird das Verzeichnis erstellt, in dem Sie die Konfigurationsdateien und (normalerweise) die eigentliche Datenbank aufbewahren. Das haben Sie offensichtlich schon getan; Andernfalls würde es keine pg_hba.conf geben, die Sie bearbeiten könnten.

Also, lauf einfach nicht postgresql initdb erneut, es sei denn, Sie führen eine vollständige Neuinstallation durch.

18
Jenny D

Von hier :

Wenn Sie eine Postgres-Datenbank vollständig löschen und neu installieren, wird beim Ausführen von initdb Folgendes ausgeführt:

service postgresql-9.2 initdb -E 'UTF8' --pgdata="/foo/bar/"

dieser Servicefehler kann auftreten:

Datenverzeichnis ist nicht leer! [GESCHEITERT]

Um dies zu beheben (und dies ist die nukleare Option - alle Datenbankdaten werden gelöscht!)

Unter Amazon Linux (2014-x):

rm -rf /var/lib/pgsql9/data

Unter CentOS (6.x)

rm -rf /var/lib/pgsql/9.2/data

Versuchen Sie nun den Befehl initdb erneut und diesmal sollte es funktionieren:

service postgresql-9.2 initdb

15
sv.

Auf systembasierten Systemen wie RHEL/CentOS 7 und Fedora ist das Verfahren zum Ausführen von initdb etwas anders. Dies wird von den Init-Skripten (die nicht mehr existieren) nicht mehr ausgeführt, und die neue Prozedur ist viel näher an den Upstream-Anweisungen .

Sie müssen zuerst su an den Benutzer postgres senden und dann initdb oder pg_ctl initdb Ausführen. Es ist nicht erforderlich, ein Datenverzeichnis anzugeben, wenn Sie einen Red Hat-Build verwenden, da der Standard automatisch das Standarddatenverzeichnis /var/lib/pgsql Auswählt.

Zum Beispiel:

# su - postgres
$ pg_ctl initdb
$ exit
#

Natürlich tun Sie dies bei der ersten Installation nur einmal, um das ursprüngliche Datenverzeichnis einzurichten. Sie würden es nicht erneut tun, wenn Sie nicht eine vollständig neue Installation erstellen oder nach einer Katastrophe wiederherstellen würden.

4
Michael Hampton

Ich hatte das gleiche Problem mit PostgreSQL 9.3 unter CentOS 6.

Ich habe den Ordner /var/lib/pgsql/9.3/data gelöscht und den Befehl erneut ausgeführt

Sudo service postgresql-9.3 initdb

... die den Datenbankdienst erneut erfolgreich initialisiert haben.

3
Fuzzy Analysis