postgresql installation: initdb datenverzeichnis nicht leer?

17

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 ist die Ursache dieser Fehler und wie behebe ich sie?

sridhar
quelle

Antworten:

18

Initdb sollte nur einmal ausgeführt werden. Es wird das Verzeichnis erstellt, in dem Sie die Konfigurationsdateien und (normalerweise) die eigentliche Datenbank aufbewahren. Das hast du offensichtlich schon getan; Ansonsten gäbe es keine pg_hba.conf, die Sie bearbeiten könnten.

Führen postgresql initdbSie das Programm also nicht erneut aus, es sei denn, Sie führen eine vollständige Neuinstallation durch.

Jenny D sagt Reinstate Monica
quelle
danke für die antwort .. ich
führe
Ich meine, es gibt kein Problem mit Ihrer Installation, zumindest nicht mit der, die Sie gezeigt haben. Das einzige, was fehlschlägt, ist, initdb mehr als einmal auszuführen, und das sollte fehlschlagen - alles andere wird als OK angezeigt . Wenn es ein anderes Problem gibt, wäre es hilfreich, wenn Sie es beschreiben könnten.
Jenny D sagt Reinstate Monica
Vielen Dank .. dann ist es kein Problem .. wenn ich vor einem Problem
stehe,
15

Von hier :

Wenn Sie eine Postgres-Datenbank vollständig löschen und neu installieren, gehen Sie initdbwie folgt vor :

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

Sie können auf diesen Dienstfehler stoßen:

Datenverzeichnis ist nicht leer! [GESCHEITERT]

Um das Problem 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 initdbBefehl erneut und es sollte diesmal funktionieren:

service postgresql-9.2 initdb

sv.
quelle
4

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 durchgeführt, und die neue Prozedur ist den Anweisungen in der Originalversion viel näher .

Sie müssen zuerst suden postgresBenutzer ansprechen und dann initdboder ausführen pg_ctl initdb. Es ist nicht erforderlich, ein Datenverzeichnis anzugeben, wenn Sie einen Red Hat Build verwenden, da dieser automatisch das Standarddatenverzeichnis auswählt /var/lib/pgsql.

Beispielsweise:

# su - postgres
$ pg_ctl initdb
$ exit
#

Natürlich tun Sie dies nur einmal bei der Erstinstallation, um das anfängliche Datenverzeichnis einzurichten. Sie würden es nicht noch einmal tun, wenn Sie keine komplett neue Installation erstellen oder nach einer Katastrophe wiederherstellen würden.

Michael Hampton
quelle
3

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 dann den Befehl erneut ausgeführt

sudo service postgresql-9.3 initdb

... was den db service wieder erfolgreich initialisiert hat.

Fuzzy-Analyse
quelle