3. Instalación del servidor
PostgreSQL es un sistema gestor de bases de datos relacional, de código abierto, que sigue una arquitectura cliente-servidor. En este modelo, el servidor es el encargado de almacenar y gestionar la información, mientras que los clientes envían consultas y reciben resultados.
La comunicación con el servidor se realiza mediante SQL, un lenguaje estándar para definir, consultar y manipular datos. PostgreSQL ofrece funciones avanzadas como la gestión de transacciones, el control de concurrencia multiversión (MVCC), la replicación y mecanismos de integridad y seguridad.
Una instalación correcta es esencial para comenzar a trabajar con PostgreSQL de forma segura y estable. En esta unidad se utilizará Ubuntu Server como entorno de trabajo para instalar, verificar y administrar el servidor.
Importancia del servidor PostgreSQL
- administra las bases de datos del sistema;
- atiende las conexiones de los clientes;
- controla el acceso, la seguridad y la integridad de los datos;
- permite gestionar múltiples usuarios y procesos simultáneamente.
Instalación desde Ubuntu
Antes de comenzar, es importante asegurarse de que el sistema está actualizado:
sudo apt update
sudo apt upgrade -y
Para instalar PostgreSQL y sus utilidades adicionales, se ejecuta:
sudo apt install postgresql postgresql-contrib -y
Este comando instala el servidor PostgreSQL y herramientas complementarias útiles para la administración y la recuperación de datos.
Tip
Para instalar una versión específica o la última versión disponible, es recomendable consultar la guía oficial de PostgreSQL para Ubuntu: postgresql.org/download/linux/ubuntu
Primer acceso al SGBD con el usuario del sistema postgres
Durante la instalación se crea el usuario del sistema postgres, que es el propietario del servicio y del clúster de PostgreSQL. Este usuario permite administrar el servidor desde el sistema operativo y ejecutar la consola de PostgreSQL (psql).
Para entrar en la consola interactiva de PostgreSQL, se puede cambiar a este usuario y abrir psql:
sudo -i -u postgres
psql
sudo -i -u postgresabre una shell de login como el usuariopostgres(-uindica el usuario y-icarga su entorno y su directorio personal).psqlabre la consola interactiva de PostgreSQL con el rolpostgres.
También se puede hacer directamente desde la línea de comandos:
sudo -u postgres psql
Este comando ejecuta solo psql como postgres. No necesita -i porque no se abre una shell de login, sino que se lanza un único programa y se vuelve a la sesión original al salir.
Al iniciar una sesión de PostgreSQL mediante psql, el indicador de la consola cambiará a:
postgres=#
Esto indica que ya no se están ejecutando comandos en la shell de Linux, sino en la consola interactiva de PostgreSQL.
Para salir del entorno interactivo, se escribe:
postgres=# \q
Importante
El usuario del sistema operativo postgres tiene permisos para administrar el servicio y el clúster de PostgreSQL.
Sin embargo, dentro de PostgreSQL también existe un rol inicial llamado postgres, que actúa como usuario administrador del SGBD y es responsable de gestionar las bases de datos y sus objetos durante la configuración inicial.
Aunque ambos compartan el mismo nombre, pertenecen a ámbitos distintos: el sistema operativo y el propio SGBD.
Este concepto se profundizará en la unidad 3, cuando se estudien los usuarios, los roles y los permisos del sistema gestor. Por ahora, basta con reconocer que el rol postgres es la identidad administrativa inicial de PostgreSQL y que debe manejarse con precaución.
Una vez verificado este acceso local, se puede preparar la conexión desde clientes locales o remotos con permisos específicos.
Estructura típica de un servidor PostgreSQL
Tras la instalación y el primer acceso inicial, es útil conocer la distribución de los archivos y directorios del servidor. En Ubuntu, PostgreSQL organiza la configuración, los datos y los registros en ubicaciones diferenciadas para facilitar su administración y la resolución de incidencias.
A continuación se muestra un esquema simplificado de la estructura típica de un clúster PostgreSQL:
/
├── etc/postgresql/<versión>/main/
│ ├── postgresql.conf
│ ├── pg_hba.conf
│ └── pg_ident.conf
├── var/lib/postgresql/<versión>/main/
│ ├── base/
│ ├── global/
│ ├── pg_wal/
│ └── PG_VERSION
├── var/log/postgresql/
│ └── postgresql-<versión>-main.log
└── usr/bin/
├── psql
├── pg_dump
└── pg_restore
<versión> representa la versión instalada, por ejemplo 16. El nombre main identifica el clúster creado durante la instalación en Ubuntu.
Tip
Un clúster es el conjunto de archivos y procesos que gestionan una o varias bases de datos de PostgreSQL.
Para consultar los clústeres instalados, su puerto y su estado, se puede utilizar el comando pg_lsclusters.
Este comando muestra, entre otros datos, la versión, el nombre del clúster, el puerto, el estado y el directorio de datos.
Ubicaciones principales
| Ubicación | Contenido principal | Función |
|---|---|---|
/etc/postgresql/<versión>/main/ |
postgresql.conf, pg_hba.conf, pg_ident.conf |
Contiene la configuración general, las reglas de autenticación y la relación entre usuarios del sistema y roles de PostgreSQL. |
/var/lib/postgresql/<versión>/main/ |
Archivos de las bases de datos | Almacena los datos gestionados por PostgreSQL. Estos archivos no deben modificarse manualmente. |
/var/log/postgresql/ |
Archivos de registro | Permite revisar errores de arranque, conexiones y funcionamiento del servidor. |
/usr/bin/ |
psql, pg_dump, pg_restore |
Contiene herramientas de cliente, administración, copia y restauración. |
Inspección de la estructura del directorio
Para inspeccionar la estructura de los directorios del servidor, puede instalarse la utilidad tree:
sudo apt install tree
Después, se pueden consultar los directorios principales con una profundidad limitada para que la salida sea manejable:
sudo tree -L 3 /etc/postgresql
sudo tree -L 3 /var/lib/postgresql
sudo tree -L 2 /var/log/postgresql
Para localizar las herramientas de PostgreSQL sin listar todo /usr/bin/, se puede utilizar:
command -v psql pg_dump pg_restore
La salida mostrará la ruta completa de cada ejecutable si está instalado y disponible en la variable de entorno PATH.
Comprobaciones iniciales
Antes de configurar acceso remoto, es necesario comprobar que PostgreSQL está instalado y funcionando correctamente en el sistema local.
Estas comprobaciones permiten verificar que el servicio está activo, que la versión es la correcta, que la autenticación local funciona, que el puerto de escucha está bien configurado y que el clúster está disponible para aceptar conexiones.
Se recomienda seguir este orden:
- Comprobar el estado del servicio
- Comprobar la versión instalada
- Comprobar la conexión local
- Comprobar el puerto de escucha
- Comprobar el estado de los clústeres
- Comprobar la disponibilidad del servidor
1. Estado del servicio
Antes de trabajar con PostgreSQL, es necesario verificar que el servicio del servidor está en ejecución.
Comprobar el estado del servicio:
Ejecuta:
sudo systemctl status postgresql
- Si PostgreSQL funciona correctamente, aparecerá
Active: active (running)
Comprobar rápidamente si está activo:
También podemos realizar una comprobación rápida:
sudo systemctl is-active postgresql
- Si el resultado es
activeel servidor PostgreSQL está funcionando.
Comprobar el inicio automático:
Es conveniente comprobar que PostgreSQL está configurado para iniciarse automáticamente cuando arranca Ubuntu:
sudo systemctl is-enabled postgresql
- Si aparece
enabledPostgreSQL se iniciará automáticamente al arrancar el sistema.
Advertencia
Si el servicio no está activo, no debe continuarse con la configuración de clientes ni con la administración de bases de datos hasta identificar la causa del problema.
Si PostgreSQL no está activo:
Si el servicio aparece como inactive, podemos iniciarlo y después volvemos a comprobar su estado con estos comandos:
sudo systemctl start postgresql
sudo systemctl status postgresql
2. Versión instalada
Para comprobar la versión instalada, se debe consultar por separado el cliente psql y el servidor PostgreSQL.
Versión del cliente
psql --version
Este comando informa sobre la versión del programa psql instalado en Ubuntu. La opción --version solo muestra el cliente y no conecta con el servidor.
Versión del servidor
sudo -u postgres psql -c "SELECT version();"
Con este comando, el cliente psql se conecta al servidor local y ejecuta la consulta SELECT version();, que devuelve la versión del servidor junto con detalles de compilación. Si aparece el resultado, el servidor ha respondido correctamente a la conexión local.
Las versiones pueden ser distintas porque una corresponde al cliente y la otra al servidor. Es recomendable anotar ambas para saber qué cliente y qué motor están instalados.
3. Conexión local
Realiza una conexión local con el usuario administrativo postgres y ejecuta una consulta sencilla:
sudo -u postgres psql -c "SELECT current_user, current_database();"
Ejemplo de salida:
current_user
--------------
postgres
Si la consulta devuelve un resultado, significa que el servidor acepta conexiones y es capaz de ejecutar sentencias SQL correctamente.
4. Puerto de escucha
Por defecto, PostgreSQL utiliza el puerto TCP 5432.
Se puede consultar el puerto configurado desde el propio servidor:
sudo -u postgres psql -c "SHOW port;"
También se puede comprobar si existe un proceso escuchando en ese puerto. Este comando muestra los puertos TCP en escucha y el proceso asociado:
sudo ss -ltnp | grep 5432
Resultado esperado:
- Debe aparecer una línea asociada a PostgreSQL.
- Si no aparece, el servicio puede estar detenido, utilizar otro puerto o tener una configuración incorrecta.
5. Estado de los clústeres
En Ubuntu y otras distribuciones basadas en Debian, PostgreSQL puede gestionar uno o varios clústeres. Cada clúster dispone de su propia configuración, directorio de datos, procesos y puerto de escucha. Para consultar los clústeres instalados en el sistema, ejecuta:
pg_lsclusters
Ejemplo de salida:
Ver Cluster Port Status Owner Data directory
16 main 5432 online postgres /var/lib/postgresql/16/main
Los campos más relevantes son:
| Campo | Significado |
|---|---|
Ver |
Versión de PostgreSQL. |
Cluster |
Nombre del clúster. |
Port |
Puerto utilizado. |
Status |
Estado actual (online u offline). Si el estado aparece como online, el clúster está en ejecución. Si aparece como offline, el clúster no aceptará conexiones. |
Owner |
Usuario propietario del proceso. |
Data directory |
Ubicación de los datos. |
Cuando sea necesario administrar un clúster concreto, pueden utilizarse comandos como:
sudo pg_ctlcluster 16 main start
sudo pg_ctlcluster 16 main stop
sudo pg_ctlcluster 16 main restart
Estas utilidades permiten iniciar, detener o reiniciar un clúster específico sin necesidad de actuar sobre otros clústeres instalados en el servidor.
Note
En una instalación estándar de Ubuntu suele crearse automáticamente un clúster llamado main. Su estado debería aparecer como online tras la instalación.
6. Disponibilidad del servidor
La utilidad pg_isready permite verificar rápidamente si PostgreSQL acepta conexiones de clientes:
pg_isready
Resultado esperado:
- Un resultado como
accepting connectionsindica que el servidor está preparado para recibir conexiones. - Si aparece
no response, es necesario revisar el estado del servicio, el puerto y los registros.
Aunque pg_isready confirma que el servidor acepta conexiones, es recomendable realizar previamente una comprobación de conexión local.
Importante
Tras realizar estas comprobaciones, registra los resultados y la fecha en la documentación de la instalación. No se debe configurar el acceso remoto hasta que se haya verificado el correcto funcionamiento del servicio en local.
Diagnóstico de errores e interpretación de registros
Durante la instalación o el funcionamiento del servidor pueden aparecer errores de paquetes, permisos, configuración, autenticación o red.
Para averiguar la causa, no basta con repetir el comando que ha fallado: hay que comprobar el estado del servicio y consultar los mensajes registrados en el momento del problema.
En Ubuntu, existen dos fuentes principales de información:
- Consultar el diario del servicio
systemd; - Consultar los archivos de registro de PostgreSQL, si están habilitados en esa instalación.
1. Diario del servicio systemd
En primer lugar, consulta el estado general del servicio, el tiempo que lleva activo y los procesos asociados:
sudo systemctl status postgresql --no-pager
Resultado esperado:
- Este comando muestra información detallada sobre el servicio PostgreSQL, incluyendo su estado actual, la fecha de inicio y los procesos que tiene asociados.
En caso de producirse un error durante el arranque o el funcionamiento del servidor, los registros pueden consultarse mediante journalctl, una herramienta fundamental en Ubuntu Server para el diagnóstico de incidencias. Para mostrar las últimas entradas registradas por el servicio PostgreSQL, ejecuta:
sudo journalctl -u postgresql --no-pager -n 80
Resultado esperado:
-u postgresql: muestra únicamente las entradas asociadas al servicio PostgreSQL.-n 80: limita la salida a las 80 entradas más recientes.--no-pager: muestra la salida directamente en la terminal sin utilizar un paginador.
Para visualizar los registros más recientes y seguir los eventos en tiempo real, de forma similar a tail -f, puede utilizarse:
sudo journalctl -u postgresql -f
La consulta de estos registros es una tarea básica de administración que permite detectar problemas de configuración, errores de conexión o incidencias durante el inicio del servicio.
2. Archivos de registro /var/log/postgresql/
En muchas instalaciones de Ubuntu, PostgreSQL guarda archivos de registro en /var/log/postgresql/. Para consultar sus últimas 50 líneas:
sudo tail -n 50 /var/log/postgresql/postgresql-*.log
Resultado esperado:
tail -n 50muestra las 50 líneas más recientes de cada archivo que coincida con ese patrón.- Si no hay archivos o el comando indica que no encuentra ninguno, puede que esa instalación no esté guardando registros en ese directorio; en ese caso, conviene consultar el diario de
systemd.
3. Interpretar los mensajes
Al revisar la salida, conviene fijarse en la fecha y la hora para localizar los mensajes relacionados con el fallo. Se debe leer el mensaje completo y las líneas próximas, porque suelen indicar qué operación falló y aportar una pista sobre la causa.
Entre los problemas habituales se encuentran:
- falta de paquetes o dependencias;
- conflicto de puertos o servicios ya ocupados;
- permisos de los directorios de datos o de ejecución;
- errores de sintaxis en archivos de configuración;
- problemas con la autenticación o la red.
Tip
Anota el comando que produjo el problema y conserva el mensaje de error completo. Antes de modificar un archivo de configuración, identifica la causa y guarda una copia del archivo original.
Secuencia recomendada para investigar una incidencia
- Comprueba el servicio con
systemctl statusy el estado del clúster conpg_lsclusters. - Consulta el diario con
journalctly busca los mensajes de la hora en que ocurrió el problema. - Revisa los archivos de
/var/log/postgresql/, si existen. - Contrasta el mensaje con la configuración, los permisos, el puerto y la operación que estabas realizando.
- Una vez aplicada una corrección justificada, vuelve a comprobar el clúster y la conexión con
pg_isready.
Resolución de incidencias de instalación
Una vez reunida la información del apartado anterior, se debe relacionar el síntoma con los mensajes del servicio y del clúster. No se debe reiniciar el servidor ni cambiar archivos de configuración a ciegas: primero se debe identificar una causa probable y comprobar que la acción propuesta puede corregirla.
Casos frecuentes de incidencia
Algunos casos frecuentes son:
- el servicio no inicia porque hay un error en
postgresql.confopg_hba.conf; - no existe la base de datos por defecto o la inicialización del clúster falla;
- el puerto
5432está ocupado por otra aplicación; - la autenticación local impide el acceso desde clientes;
- no se ha habilitado la escucha en la dirección IP correcta.
Procedimiento recomendado
Cuando aparece una incidencia, el procedimiento recomendado es:
- comprobar el estado del servicio PostgreSQL;
- revisar el último error registrado en el diario del servicio o en los archivos de log;
- verificar la sintaxis y la coherencia de los archivos de configuración modificados;
- restaurar una copia de seguridad de la configuración si fuese necesario;
- reiniciar el servicio y validar nuevamente su funcionamiento;
- comprobar que es posible establecer una conexión local mediante herramientas como
psqlopg_isready; - documentar la incidencia, la causa identificada y la solución aplicada.
El análisis de la causa raíz constituye una parte fundamental de la administración de bases de datos: un arreglo rápido sin comprender la causa puede provocar que el problema reaparezca en otra fase de la implantación.
Conclusión
En esta unidad se ha visto cómo instalar PostgreSQL en Ubuntu Server, cómo verificar su funcionamiento y cómo interpretar los mensajes del sistema para diagnosticar problemas básicos. Estos pasos son fundamentales porque todo el trabajo posterior con bases de datos dependerá de que el servicio esté instalado, activo y correcto.
Antes de seguir con configuraciones más avanzadas, conviene tener claro lo siguiente:
- el servidor debe estar en ejecución;
- la autenticación local debe funcionar;
- la escucha del puerto debe estar correcta;
- los registros deben revisarse cuando aparece un problema.
Si estos aspectos se controlan correctamente, la configuración de clientes y la administración de bases de datos será mucho más segura y estable.