instalación postgresql: ¿el directorio de datos initdb no está vacío?

17

Estoy tratando de crear la base de datos postgresql.

Cuando instalo PostgreSQL, le di este comando:

sudo yum install postgresql postgresql-server

y luego modifiqué el archivo de configuración:

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

y modificado como

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

Mientras intento iniciar el servicio postgresql:

sudo service postgresql initdb

> Data directory is not empty!                               [FAILED]

sudo chkconfig postgresql on

sudo service postgresql start

Starting postgresql service:                               [  OK  ]

¿Qué causa estos errores y cómo los soluciono?

sridhar
fuente

Respuestas:

18

Initdb solo debe ejecutarse una vez. Creará el directorio donde guardará los archivos de configuración y (generalmente) la base de datos real. Obviamente ya lo has hecho; De lo contrario, no habría ningún pg_hba.conf para editar.

Por lo tanto, simplemente no postgresql initdbvuelva a ejecutar , a menos que esté haciendo una reinstalación completa.

Jenny D
fuente
gracias por la respuesta ... lo ejecuto dos veces ... quieres decir que no es el problema en la instalación ...
sridhar
Quiero decir que no hay ningún problema con su instalación, al menos ninguno que haya mostrado. Lo único que falla es hacer initdb más de una vez, y eso debería fallar; todo lo demás se muestra como correcto. Si hay algún otro problema, ayudaría si pudiera describirlo.
Jenny D
Muchas gracias .. entonces no es un problema .. si me enfrento a un problema que dejaré saber ..
sridhar
15

Desde aquí :

Si está limpiando y reinstalando completamente una base de datos de Postgres, cuando se ejecuta initdbcomo:

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

puede encontrar este error de servicio:

¡El directorio de datos no está vacío! [HA FALLADO]

Para solucionarlo (y esta es la opción nuclear, ¡se borran todos los datos de db!)

En Amazon Linux (2014-x):

rm -rf /var/lib/pgsql9/data

En CentOS (6.x)

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

Ahora intente el initdbcomando nuevamente y debería funcionar esta vez:

service postgresql-9.2 initdb

sv.
fuente
4

En sistemas basados ​​en systemd como RHEL / CentOS 7 y Fedora, el procedimiento para ejecutar initdb es algo diferente. Esto ya no lo hacen los scripts de inicio (que ya no existen), y el nuevo procedimiento está mucho más cerca de las instrucciones ascendentes .

Primero debe dirigirse sual postgresusuario y luego ejecutar initdbo pg_ctl initdb. No es necesario proporcionar un directorio de datos si está utilizando una compilación de Red Hat, ya que su valor predeterminado elige automáticamente el directorio de datos predeterminado /var/lib/pgsql.

Por ejemplo:

# su - postgres
$ pg_ctl initdb
$ exit
#

Por supuesto, solo hace esto una vez, en la primera instalación, para configurar el directorio de datos inicial. No lo volvería a hacer a menos que estuviera creando una instalación completamente nueva o restaurando desde un desastre.

Michael Hampton
fuente
3

Tuve el mismo problema, usando PostgreSQL 9.3 en CentOS 6.

Eliminé la carpeta /var/lib/pgsql/9.3/data, luego volví a ejecutar el comando

sudo service postgresql-9.3 initdb

... que inicializó con éxito el servicio db nuevamente.

Análisis difuso
fuente