Postgresql no pudo iniciar

Estoy tratando de usar PostgreSQL en Ubuntu. Lo instalé y todo funcionaba bien. Sin embargo, tuve que cambiar la ubicación de mi base de datos debido a las limitaciones de espacio, así que probé una guía en línea para hacerlo.

Procedí a detener postgresql, a crear un nuevo directorio vacío y le doy permisos usando

chown postgres:postgres /my/dir/path 

Eso funcionó bien también. Entonces utilicé

 initdb -D /my/dir/path 

para habilitar mi base de datos. También cambié el path_data en el archivo postgresql.conf a mi nuevo directorio.

Cuando ahora bash iniciar la base de datos, dice: The postgresql server failed to start, please check the log file . Sin embargo, no hay ningún archivo de registro! Algo se arruinó cuando cambié el directorio predeterminado. ¿Cómo puedo solucionar esto?

Primero: puede que le resulte más fácil administrar sus instalaciones de Pg en Ubuntu utilizando las herramientas personalizadas que Ubuntu proporciona como parte de pg_wrapper : pg_createcluster , pg_dropcluster , pg_ctlcluster , etc. Se integran con los scripts de inicio de Ubuntu y mueven la configuración a /etc/postgresql/ where A Ubuntu le gusta mantenerlo, en lugar del valor predeterminado de PostgreSQL en datadir. Para moverse donde se almacenan los archivos reales, use un enlace simbólico (ver más abajo).

Cuando tienes un problema, ¿cómo estás iniciando PostgreSQL?

Si lo está iniciando a través de pg_ctl , debería funcionar bien porque debe especificar la ubicación del directorio de datos. Sin embargo, si está utilizando los scripts de su paquete de distribución, no saben que ha movido el directorio de datos.

En Ubuntu, deberá cambiar la configuración en /etc/postgresql para indicar a los scripts dónde se encuentra el directorio de datos, probablemente pg_ctl.conf o start.conf para la versión apropiada. No estoy seguro de los detalles ya que nunca he necesitado hacerlo. Esta es la razón por:

Aunque hay una mejor manera. Use un enlace simbólico desde su ubicación de datadir anterior a la nueva. PostgreSQL y los scripts de configuración lo seguirán y no tendrá que cambiar ninguna configuración.

 cd /var/lib/postgresql/9.1/main mv main main.old ln -s /new/datadir/location main 

Estoy adivinando “9.1” porque no le diste tu versión de Ubuntu o tu versión de PostgreSQL.

Una alternativa es usar mount -o bind para asignar su nueva ubicación de datos al lugar antiguo, para que nada note la diferencia. Luego agregue el assembly de enlace a /etc/fstab para hacerlo persistente en los reinicios. Solo necesita hacer eso si a una de las herramientas no le gusta el enfoque de enlace simbólico. No creo que sea un problema con pg_wrapper etc.

También debe tener en cuenta que, dado que ha usado initdb manualmente, su nueva datadir tendrá su configuración directamente dentro de la datadir, no en /etc/postgresql/ .

Es mucho más fácil si solo usas los scripts de administración de cluster de Ubuntu.