Saltar a contenido

4. Puesta en marcha y comprobación

Una vez instalado PostgreSQL, el administrador debe saber cómo iniciar, detener, reiniciar, recargar y comprobar el estado del servicio para realizar tareas de mantenimiento y aplicar cambios de configuración.

Gestión mediante systemd

En Ubuntu Server, PostgreSQL se gestiona habitualmente mediante systemd, por lo que la herramienta principal es systemctl.

Comprobar el estado del servidor

Para consultar si PostgreSQL está funcionando:

sudo systemctl status postgresql

El resultado permite comprobar si el servicio está:

  • active (running) → PostgreSQL está funcionando.
  • inactive → el servicio está detenido.
  • failed → se ha producido un error al iniciar o ejecutar el servicio.

Para salir de la información mostrada por status, pulsa q.


Iniciar y detener PostgreSQL

Los principales comandos son:

Comando Función
sudo systemctl start postgresql Inicia PostgreSQL.
sudo systemctl stop postgresql Detiene PostgreSQL.
sudo systemctl restart postgresql Detiene y vuelve a iniciar PostgreSQL.
sudo systemctl reload postgresql Recarga la configuración sin reiniciar completamente el servidor.
sudo systemctl status postgresql Muestra el estado del servicio.

¿Reiniciar o recargar?

restart detiene y vuelve a iniciar completamente PostgreSQL. reload vuelve a leer los archivos de configuración compatibles con recarga sin interrumpir las conexiones activas.

Siempre que sea posible, es preferible utilizar reload, ya que evita detener el servicio.

¿Se puede reiniciar PostgreSQL desde SQL?

No existe un comando SQL para reiniciar completamente el servidor PostgreSQL. Desde una sesión SQL sí se puede solicitar una recarga de la configuración:

SELECT pg_reload_conf();

Esta función no detiene ni vuelve a iniciar el servidor. Si un cambio necesita un reinicio, hay que salir de psql y ejecutarlo desde el sistema operativo, por ejemplo en Ubuntu:

sudo systemctl restart postgresql

También se puede usar pg_ctl sobre el clúster correspondiente, como se explica más adelante en esta unidad. Para la administración habitual de una instalación gestionada por systemd, se recomienda systemctl.

Inicio automático con Ubuntu

Además de iniciar o detener PostgreSQL manualmente, podemos indicar si el servicio debe iniciarse automáticamente cuando arranca Ubuntu.

Para gestionar el inicio automático del servicio se pueden utilizar los siguientes comandos:

Comando Acción
sudo systemctl is-enabled postgresql Comprueba si PostgreSQL está configurado para arrancar automáticamente al iniciar Ubuntu.
sudo systemctl enable postgresql Activa el inicio automático del servicio.
sudo systemctl enable --now postgresql Activa el inicio automático y arranca PostgreSQL inmediatamente.
sudo systemctl disable postgresql Desactiva el inicio automático del servicio.

Herramienta de control de PostgreSQL pg_ctl

PostgreSQL incluye una herramienta llamada pg_ctl que permite iniciar, detener, reiniciar, recargar y consultar el estado de un servidor PostgreSQL.

En sistemas Linux como Ubuntu, la administración habitual del servicio suele realizarse mediante systemctl.

Sin embargo, pg_ctl resulta especialmente útil cuando se trabaja directamente con un clúster PostgreSQL concreto, ya que permite gestionarlo indicando su directorio de datos.

Clúster PostgreSQL

En PostgreSQL, un clúster es el conjunto de bases de datos gestionadas por una misma instancia del servidor y almacenadas en un mismo directorio de datos.

No debe confundirse con un clúster de alta disponibilidad formado por varios servidores.

Sintaxis general

pg_ctl [opciones] acción

Donde:

  • opciones modifica el comportamiento del comando.
  • acción indica la operación que se desea realizar sobre el servidor PostgreSQL.

Opciones

Opción Descripción
-D directorio Indica el directorio de datos del clúster PostgreSQL sobre el que se va a trabajar.
-l fichero Envía los mensajes de inicio y funcionamiento a un fichero de registro.
-m modo Especifica el modo de parada (smart, fast o immediate).
-w espera a que la operación termine y devuelve su resultado.
-W No espera a que la operación finalice y devuelve el control inmediatamente.
-t segundos Establece el tiempo máximo de espera para determinadas operaciones.
-s Muestra únicamente mensajes de error, reduciendo la información mostrada en pantalla.

Acciones

En todas estas acciones puede utilizarse la opción -D directorio para indicar el clúster sobre el que se desea trabajar.

Acción Descripción
start Inicia el servidor PostgreSQL.
stop Detiene el servidor PostgreSQL.
restart Reinicia el servidor PostgreSQL.
reload Recarga los archivos de configuración sin reiniciar el servidor.
status Muestra el estado actual del servidor PostgreSQL.

Modos de parada

Al utilizar pg_ctl stop, podemos indicar mediante la opción -m cómo queremos detener PostgreSQL.

Modo Descripción
smart No acepta nuevas conexiones y espera a que finalicen todas las sesiones activas antes de detener el servidor.
fast Finaliza las conexiones activas y cancela las transacciones no confirmadas. Es el modo de parada habitual.
immediate Detiene PostgreSQL inmediatamente sin realizar una parada ordenada. Debe utilizarse únicamente en situaciones excepcionales. Durante el siguiente arranque PostgreSQL ejecutará una recuperación automática.

Ejemplos de uso

Ejemplo: Iniciar el servidor PostgreSQL

pg_ctl -D /var/lib/postgresql/16/main start

Este comando inicia el servidor PostgreSQL asociado al clúster almacenado en el directorio /var/lib/postgresql/16/main.

Ejemplo: Comprobar el estado del servidor PostgreSQL

Por ejemplo:

pg_ctl -D /var/lib/postgresql/16/main status

Este comando permite comprobar si el servidor PostgreSQL asociado al clúster situado en /var/lib/postgresql/16/main se encuentra en ejecución.

Si PostgreSQL está funcionando, se mostrará información similar a:

pg_ctl: server is running (PID: 3456)
/usr/lib/postgresql/16/bin/postgres ...

Si el servidor está detenido, aparecerá un mensaje parecido a:

pg_ctl: no server running

Ejemplo: Detener el servidor PostgreSQL

Por ejemplo:

pg_ctl -D /var/lib/postgresql/16/main -m fast stop

Este comando detiene el servidor PostgreSQL asociado al clúster situado en /var/lib/postgresql/16/main utilizando el modo de parada fast, que es el método recomendado para una parada normal del servicio.

El modo fast:

  • impide nuevas conexiones;
  • finaliza las sesiones activas;
  • cancela las transacciones que no hayan sido confirmadas;
  • realiza una parada segura y controlada del servidor.

Ejemplo: Recargar la configuración

Después de modificar archivos como postgresql.conf o pg_hba.conf, normalmente es suficiente ejecutar reload para que PostgreSQL vuelva a leer la configuración sin detener el servidor:

   pg_ctl -D /var/lib/postgresql/16/main reload

Usuario propietario del clúster

La herramienta pg_ctl debe ejecutarse como el usuario propietario del clúster, que normalmente es postgres. Ejecutarla con otro usuario puede producir errores de permisos.

Realizamos el cambio de usuario:

sudo -i -u postgres

A partir de ese momento, los comandos pg_ctl se ejecutarán con los permisos adecuados.

Ubicación de pg_ctl

En muchas distribuciones Linux, los ejecutables de PostgreSQL se almacenan dentro del directorio de instalación de PostgreSQL.

Por ejemplo, en Ubuntu y Debian para PostgreSQL 16 es habitual encontrarlos en:

/usr/lib/postgresql/16/bin

Hay que tener en cuenta que la ruta exacta puede variar según la distribución y la versión instalada.

Si el comando pg_ctl no se encuentra disponible desde cualquier ubicación del sistema, podemos acceder primero a dicho directorio:

cd /usr/lib/postgresql/16/bin

y ejecutar posteriormente los comandos de administración:

./pg_ctl -D /var/lib/postgresql/16/main status
./pg_ctl -D /var/lib/postgresql/16/main -m fast stop

También es posible ejecutar pg_ctl indicando su ruta completa:

/usr/lib/postgresql/16/bin/pg_ctl -D /var/lib/postgresql/16/main status

Recomendación final

No mezclar herramientas

Cuando PostgreSQL está gestionado por systemd, lo habitual es utilizar systemctl para iniciar, detener o reiniciar el servicio.

Aunque pg_ctl puede realizar operaciones similares, no conviene alternar ambas herramientas sin conocer su funcionamiento.

En Ubuntu se recomienda utilizar systemctl para la administración cotidiana y reservar pg_ctl para tareas específicas o cuando se trabaja directamente con un clúster concreto.

En la mayoría de instalaciones Ubuntu administradas mediante systemctl, normalmente no será necesario acceder directamente a este directorio.