web-dev-qa-db-fra.com

installation de postgresql: le répertoire de données initdb n'est pas vide?

J'essaie de créer la base de données postgresql.

Lorsque j'installe PostgreSQL, j'ai donné cette commande:

Sudo yum install postgresql postgresql-server

et plus tard j'ai modifié le fichier de configuration:

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

et modifié comme

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

Pendant que j'essaie de démarrer le service postgresql:

Sudo service postgresql initdb

> Data directory is not empty!                               [FAILED]

Sudo chkconfig postgresql on

Sudo service postgresql start

Starting postgresql service:                               [  OK  ]

Quelle est la cause de ces erreurs et comment les corriger?

17
sridhar

Initdb ne doit être exécuté qu'une seule fois. Il créera le répertoire où vous conserverez les fichiers de configuration et (généralement) la base de données réelle. Vous l'avez évidemment déjà fait déjà; Autrement, il n'y aurait pas de pg_hba.conf à modifier.

Donc, ne lancez pas postgresql initdb à nouveau, sauf si vous effectuez une réinstallation complète.

18
Jenny D

De ici :

Si vous essuyez et réinstallez complètement une base de données Postgres, lors de l'exécution de initdb comme:

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

vous pouvez rencontrer cette erreur de service:

Le répertoire de données n'est pas vide! [ÉCHOUÉ]

Pour le réparer (et c'est l'option nucléaire - toutes les données db sont effacées!)

Sur Amazon Linux (2014-x):

rm -rf /var/lib/pgsql9/data

Sur CentOS (6.x)

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

Essayez à nouveau la commande initdb et cela devrait fonctionner cette fois:

service postgresql-9.2 initdb

15
sv.

Sur les systèmes basés sur systemd comme RHEL/CentOS 7 et Fedora, la procédure pour exécuter initdb est quelque peu différente. Cela n'est plus fait par les scripts d'initialisation (qui n'existent plus), et la nouvelle procédure est beaucoup plus proche de les instructions en amont .

Vous devez d'abord su à l'utilisateur postgres, puis exécuter initdb ou pg_ctl initdb. Il n'est pas nécessaire de fournir un répertoire de données si vous utilisez une version de Red Hat car sa valeur par défaut choisit automatiquement le répertoire de données par défaut /var/lib/pgsql.

Par exemple:

# su - postgres
$ pg_ctl initdb
$ exit
#

Bien sûr, vous ne le faites qu'une seule fois, lors de la première installation, pour configurer le répertoire de données initial. Vous ne le feriez pas à nouveau, sauf si vous créez une toute nouvelle installation ou restaurez à partir d'un sinistre.

4
Michael Hampton

J'ai eu le même problème en utilisant PostgreSQL 9.3 sur CentOS 6.

J'ai supprimé le dossier /var/lib/pgsql/9.3/data, puis relancé la commande

Sudo service postgresql-9.3 initdb

... qui a réussi à initialiser à nouveau le service db.

3
Fuzzy Analysis