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?
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.
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
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.
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.