¿Por qué PostgreSQL 9.3 no se inicia en Ubuntu?


13

He instalado con éxito PostgreSQL 9.3 desde el repositorio APT en 2 máquinas virtuales que ejecutan Ubuntu 12.04 y 13.04 ... sin embargo, no puedo instalarlo correctamente en mi máquina host que ejecuta Ubuntu 12.04.

La instalación (esta vez) parece haber salido bien, pero quizás haya un error que no entiendo:

* No PostgreSQL clusters exist; see "man pg_createcluster"
Setting up postgresql-9.3 (9.3.0-2.pgdg12.4+1) ...
Creating new cluster 9.3/main ...
  config /etc/postgresql/9.3/main
  data   /var/lib/postgresql/9.3/main
  locale en_US.UTF-8
  port   5432
update-alternatives: using /usr/share/postgresql/9.3/man/man1/postmaster.1.gz to provide /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) in auto mode.

Entonces trato de agregarme como usuario de PostgreSQL, pero obtengo esto:

createuser: could not connect to database postgres: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

No puedo ver PostgreSQL ejecutándose en el monitor del sistema, y ​​no hay ningún archivo en la carpeta / var / run / postgresql / ... completamente vacío.

EDITAR: en las máquinas virtuales, hay un archivo en / var / run / postgresql / llamado 9.3-main.pid

No hay nada en el archivo de registro de la máquina host ubicado / var / log / postgresql

Entonces ... ¿qué está pasando aquí que no está pasando en mis máquinas virtuales? Como dije, las otras instalaciones en las máquinas virtuales, incluidas PostGIS y PGAdmin, fueron perfectas ... no tengo idea de por qué esta máquina host no está funcionando ...


¿Realmente tienes un /var/run/postgresqldirectorio? En una etapa después de una instalación exitosa, esa carpeta faltaba en mi máquina. ¿Qué dice la configuración sobre qué directorio debería usar?
Colin 't Hart

@ Colin'tHart Tengo ese directorio ... sin embargo, no hay nada en él ... en las máquinas virtuales, hay un archivo creado llamado 9.3-main.pid ¿Dónde encontraría esa información de configuración?
DPSEspacial

postgresql.confen el directorio de configuración, que según lo anterior, es /etc/postgresql/9.3/main. También debe buscar en los archivos de registro, probablemente en /var/log/postgresql.
Colin 't Hart

@ Colin'tHart El archivo de registro está vacío ... El archivo de configuración, y creo que esto es lo que buscas, dice # Si external_pid_file no se establece explícitamente, no se escribe ningún archivo PID adicional. external_pid_file = '/var/run/postgresql/9.3-main.pid'
DPSSpatial

¿Hay un archivo de socket en ese directorio, o está realmente completamente vacío?
Colin 't Hart

Respuestas:


16

Mi configuración regional no se configuró correctamente cuando se instaló PostgreSQL. La purga y la reinstalación no ayudaron. Seguí las instrucciones aquí y eso me funcionó.

Partes esenciales de la información vinculada que se reproduce a continuación:

El problema se mostró de la siguiente manera:

warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
...
are supported and installed on your system.

El primero fue muy fácil de resolver ejecutando:

#dpkg-reconfigure locales

... y elegir las configuraciones regionales preferidas.

Pero después de eso, PostgreSQL aún se negó a comenzar. Esto se debe al hecho de que el proceso de instalación intentó crear un clúster en el momento de la instalación, pero debido a las configuraciones regionales incorrectas, esto no se hizo. Entonces tenemos que rehacer este paso ejecutando:

#pg_createcluster 9.3 main --start

(Para la versión 9.3 de PostgreSQL)

Después de ese paso, PostgreSQL se inicia sin problemas a través de

#/etc/init.d/postgresql start

2
Salvó mi vida. Es realmente desafortunado que la purga y la reinstalación no ayuden incluso cuando se rectifica la configuración regional. Esto desperdició 2 horas de mi vida :(
Escher

En caso de que pg_createclusterte dice que el clúster ya existe lo que necesita para dejarla caer primero (esto borrará todos los datos en ella, por lo que asegúrese de que tiene una copia de seguridad): pg_dropcluster 9.3 main.
Florian Brucker

6

Espero que ya haya resuelto este problema, pero me encuentro con un problema similar que parece tener una fuente diferente, y tal vez mi experiencia le ayudará si todavía tiene un problema.

Mi problema con 9.3 en Ubuntu se relaciona con que el directorio de socket es un directorio transitorio en / run. Básicamente, se supone que el script init.d se encarga de crear el directorio de socket en / run / postgresql si no existe durante la acción de inicio. Este siempre será el estado de las cosas después de un reinicio.

Sin embargo, el problema es que el script init.d se cerrará antes de ejecutar la acción de inicio si el directorio de socket no existe. Esto se debe a que la llamada a pg_lsclusters fallará sin el directorio de socket, lo que a su vez evita que la acción de inicio cree el directorio de socket.

No he descubierto cuál es la mejor solución, pero si reubico la lógica para crear el directorio de socket desde la acción de inicio antes de la llamada a pg_lsclusters, puedo iniciar el servidor después de reiniciar sin ningún problema.

Aquí está la parte de la acción de inicio que maneja la creación del directorio de socket:

# create socket directory
if [ -d /var/run/postgresql ]; then
  chmod 2775 /var/run/postgresql
else
  install -d -m 2775 -o postgres -g postgres /var/run/postgresql
  [ -x /sbin/restorecon ] && restorecon -R /var/run/postgresql || true
fi

Publicaré una actualización si la causa raíz de esto se aclara para mí, porque claramente este no puede ser el comportamiento esperado.

APÉNDICE:

Creo que la razón por la que me encontraba con este problema es porque no tenía un buen valor configurado para unix_socket_directories . En 9.2, esta opción de configuración solía ser unix_socket_directory, que eliminé en lugar de cambiar a unix_socket_directories. Desde que configuré un valor para unix_socket_directories, no he tenido ningún problema con el inicio del servidor.


gracias @ tdg5 !!! No he resuelto esto, pero creo que se trata de varias malas instalaciones en mi máquina. Instalar desde el repositorio de PostgreSQL Apt en una nueva instalación de ubuntu resolvió mis problemas ...
DPSSpatial

3
@mapBaker: actualicé mi respuesta para incluir la causa raíz del problema de inicio de PG 9.3 en mi situación particular. Quizás también sea útil para usted.
tdg5

1
Mi PG9.3 no se inició después de reiniciar. Añadiendo la línea "unix_socket_directories = '/ var / run / postgresql'" a 9.3gresql.conf de 9.3 lo resolvió. Gracias
alfonx

¡Gracias! He estado trabajando en esto por un tiempo, ¡me alegro de encontrar esta pepita!
Serban Tanasa

3

He tenido varios problemas con el archivo de sockets, en su caso /var/run/postgresql/.s.PGSQL.5432

asegúrese de que el directorio / var / run / postgresql exista y se pueda escribir antes de iniciar postgresql para obtener más información, consulte esta discusión .

también, al conectar use -h flag:

psql -h localhost 

y ver si eso lo resuelve.


1

Esto parece solucionar el problema en Ubuntu:

Edite postgresql.conf:

unix_socket_directories='/var/run/postgresql

Ahora haz service postgresql start


1

Soy nuevo en PSQL pero resolví el problema editando start.conf. Comenté la configuración "auto" para administrar el servidor manualmente, pero necesita un valor: auto, manual o deshabilitado.

EGD


1

Por mi parte, el script de inicio es incorrecto. Los archivos de configuración se instalan en /etc/postgresql/9.3/main pero el script /usr/share/postgresql-common/init.d-functions está buscando en

for c in /etc/postgresql/"$2"/*; do 

Reemplace esta línea con

for c in /etc/postgresql/"$2"/main; do

-2

Todos,

Después de investigar un poco, encontré (a) la solución aquí:

http://ubuntuforums.org/showthread.php?t=869080

Que contenía estas instrucciones:

Ejecutar en terminal:

sudo mkdir -p /usr/local/pgsql/data
sudo chown -R postgres:postgres /usr/local/pgsql/
sudo su - postgres
cd /usr/lib/postgresql/9.3/bin/
./initdb -D /usr/local/pgsql/data
./postgres -D /usr/local/pgsql/data

¡Ahora mi servidor está funcionando!

EDITAR : después de reiniciar, el servidor aún no se está ejecutando ...

¡Se agradece cualquier idea de por qué necesitaba ejecutar esto!


¿Estás seguro de que se está ejecutando 9.3? El número de versión parece sospechoso ...
dezso

@dezso lo siento, olvidé cambiar la versión # cuando pegué esos comandos ... todo esto está en v9.3 ...
DPSSpatial

Es posible que deba especificar el puerto. La instalación anterior de postgres está utilizando el puerto predeterminado. Su nueva instalación está utilizando el puerto 5433 muy probablemente, pero esto es algo que puede verificar con seguridad leyendo el archivo de configuración postgresql:/etc/postgresql/9.3/main/postgresql.conf
user35581

1
Esto puede ser una solución, pero claramente no es una buena solución. Éste como está arreglando el problema dba.stackexchange.com/a/91511/8099
Sorin
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.