[Ubuntu 16.04] instalé postgresql 9.5 junto con las dependencias:
sudo sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' > /etc/apt/sources.list.d/pgdg.list"
wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-common
sudo apt-get install postgresql-9.5 libpq-dev
Cuando quiero correr psql
me sale:
psql: 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"?
Pero /var/run/postgresql/
esta vacio. Cuando reinicio posgresql todo parece estar bien:
$ /etc/init.d/postgresql restart
[ ok ] Restarting postgresql (via systemctl): postgresql.service.
$ /etc/init.d/postgresql status
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since wto 2016-09-27 16:18:26 CEST; 1min 15s ago
Process: 3076 ExecReload=/bin/true (code=exited, status=0/SUCCESS)
Process: 3523 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 3523 (code=exited, status=0/SUCCESS)
pero si marca ps aux
no hay tal PID (¿por qué?)
La reinstalación total no ayuda en absoluto. ¿Cómo puedo arreglarlo?
postgresql
mike927
fuente
fuente
Respuestas:
Esta es una idiosincrasia de la integración systemd de PostgreSQL en Xenial.
La unidad de servicio postgresql instalada por el paquete postgresql-common es solo un servicio ficticio que hace que el servicio real [email protected] se inicie a través de una dependencia. Puede ver esa dependencia ejecutando el comando
Esa dependencia no es permanente, sino que se genera durante el arranque del sistema por el generador systemd
/lib/systemd/system-generators/postgresql-generator
que también viene con el paquete postgresql-common. El generador verifica si el modo de inicio en el archivo/etc/postgresql/9.6/main/start.conf
está configurado yauto
, de ser así, configura la dependencia que posteriormente hace que se inicie la instancia 9.6-main.(Más precisamente, verifica todos los subdirectorios de configuración
/etc/postgresql/*/*
y creará dependencias para todas las instancias que están configuradas para el inicio automático, pero en una instalación predeterminada solo habrá una instancia).Debido a las limitaciones de los generadores de systemd (ver
man systemd.generator
), este proceso puede fallar, causando que las dependencias estén ausentes después de un reinicio. Systemd iniciará solo el servicio ficticio, escribiendoal registro pero de lo contrario no hacer nada. Intentando iniciar el servicio manualmente
solo reproducirá ese resultado. Ejecutando el comando
manualmente como root volverá a ejecutar el generador y, en la mayoría de los casos, solucionará el problema hasta el próximo reinicio.
Para resolver el problema de forma permanente, tendrá que encontrar la razón por la cual el generador falla durante el arranque. Las causas posibles se pueden encontrar en la página de manual systemd.generator. En mi caso, fue el archivo de configuración de PostgreSQL
/etc/postgresql/9.6/main/postgresql.conf
que estaba vinculado a un sistema de archivos diferente que aún no estaba disponible cuando el generador se ejecutó temprano durante el arranque.postgresql-generator
comprueba la existencia de ese archivo aunque no lo necesite de otra manera.fuente
Extendiendo la respuesta de Tilman, pero no lo suficiente Kudos para comentar ...
Si no necesita que el servicio se llame postgresql y no le importa el servicio ficticio del contenedor, debería funcionar solo para controlar el servicio real directamente. Su nombre es: postgresql@$version-$cluster.service En su caso, debe ser postgresql-9.5-main en resumen. Me gusta empezar
y para parar:
El estado también le dará información mucho mejor y más precisa que en el servicio de envoltorio generado automáticamente.
Para 9.6 se ve así:
fuente
En mi caso, esto estaba relacionado con configuraciones regionales configuradas incorrectamente.
He encontrado la solución en esta respuesta de dba.stackexchange.com :
sudo dpkg-reconfigure locales
para generar las configuraciones regionales necesariassudo pg_dropcluster 9.5 main
(¡esto borrará todos los datos en el clúster!sudo pg_createcluster 9.5 main --start
sudo service postgresql restart
fuente
sería mejor usar scripts de inicio systemd con ubuntu 16.04, los scripts de inicio podrían no funcionar correctamente en estos días. Postgres 9.5 ya está en los repositorios de ubuntu, así que intente eso, debería tener inicio de systemd.
fuente
Otro "fue mordido por esto".
En
pg_upgradecluster
realidad, dejó la versión de destino (9.6) en modo "manual" en el puerto 5433 y la versión de origen (9.5) en el puerto 5432.Incluso despues
pg_dropcluster 9.5
. La edición del archivo start.conf no ayudó, pero la sugerencia era usarsystemctl daemon-reload
, ya que el generador decide en base a este archivo de configuración si vincular el archivo de servicio:Por lo tanto, si el clúster que desea iniciar no tiene la palabra "auto" en start.conf, debe hacer una recarga del sistema (o reiniciar) para habilitarlo en el momento del arranque.
Todavía tengo que verificar esto con un reinicio, pero dado lo anterior estoy bastante seguro de que ese era el problema.
fuente
Deshabilité el "super servicio" mágico así:
Entonces activé el servicio concreto:
Después de reiniciar todo funcionó nuevamente.
fuente
Tenía el mismo error, horas perdidas, solución simple. Marque esta pregunta SO y mi respuesta, que es:
fuente
Tuve este problema debido a una razón diferente: permisos de directorio. Tuve un chmod de barrido completo como este:
Esto establece el directorio como no ejecutable, lo que evita que postgres lo lea.
fuente
Tuve este mismo problema al verificar el problema encontrado con el permiso ssl-cert-snakeoil.key.
Establecer propiedad
raíz conocida: ssl-cert ssl-cert-snakeoil.key chmod 640 ssl-cert-snakeoil.key
e hizo un reinicio limpio.
fuente