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

17

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?

sridhar
la source

Réponses:

18

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 réexécutez postgresql initdbpas, sauf si vous effectuez une réinstallation complète.

Jenny D
la source
merci pour la réponse .. je l'exécute deux fois ... vous voulez dire que ce n'est pas le problème lors de l'installation ..
sridhar
Je veux dire qu'il n'y a pas de problème avec votre installation, du moins pas celui que vous avez montré. La seule chose qui échoue est de faire initdb plus d'une fois, et cela devrait échouer - tout le reste apparaît comme OK. S'il y a un autre problème, il serait utile de le décrire.
Jenny D
Merci beaucoup .. alors ce n'est pas un problème .. si je fais face à un problème je vous le ferai savoir ..
sridhar
15

D' ici :

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

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

Maintenant, essayez à initdbnouveau la commande et cela devrait fonctionner cette fois:

service postgresql-9.2 initdb

sv.
la source
4

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 des instructions en amont .

Vous devez d'abord accéder suà l' postgresutilisateur, puis exécuter initdbou 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 faites cela 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 à moins que vous ne créiez une installation complètement nouvelle ou que vous restituiez à partir d'une catastrophe.

Michael Hampton
la source
3

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.

Analyse floue
la source