Cómo instalar PostgreSQL en CentOS 8

Vamos a ver en esta entrada cómo instalar PostgreSQL en CentOS 8 / CentOS Stream 8 paso a paso, de modo que al final de este tutorial podrás administrar y trabajar con este potente servicio de bases de datos en tu servidor o VPS CentOS de forma local o remota.

Antes de instalar PostgreSQL en CentOS 8 / CentOS Stream 8

Para seguir los pasos de esta guía de instalación de PostgreSQL en CentOS 8 necesitarías pasar estos mínimos requisitos:

  • Un sistema CentOS 8/ CentOS Stream 8 actualizado.
  • Acceso a línea de comandos como root o un usuario con capacidades de sudo.
  • Conexión a Internet.

Cómo instalar PostgreSQL Server en CentOS 8

A la hora de instalar PostgreSQL en CentOS 8 debemos tener en cuenta que en los repositorios de la distribución tenemos disponibles módulos para las versiones 9.6, 10, 11, 12, 13, 14, 15 y 16, siendo el módulo por defecto el correspondiente a la versión 10. Como seguramente la versión por defecto no será la que queramos instalar, activaremos un módulo de una versión más actual.

Empezamos desactivando los módulos de PostgreSQL:

~$ sudo yum module disable postgresql

Y ya podemos activar el módulo de la versión que nos interese:

~$ sudo yum module enable postgresql:16

¡Listo!

Instalación de PostgreSQL en CentOS 8

Antes de instalar los paquetes de PostgreSQL en CentOS 8 habrá que actualizar las listas de paquetes de los distintos repositorios:

~$ sudo yum update -y

Independientemente de cuál sea el módulo activado, el paquete que necesitamos siempre es postgresql-server:

~$ sudo yum install -y postgresql-server

Inicialización del servicio

Antes de lanzar el servicio es necesario inicializarlo, para lo cual lanzaremos el comando postgresql-setup:

~$ sudo postgresql-setup --initdb

Tras descargar e instalar PostgreSQL y sus dependencias se ha creado un nuevo servicio en CentOS 8, llamado postgresql.service (o postgresql si prefieres el nombre corto). El servicio no inicia tras la instalación ni queda habilitado para iniciar automáticamente en cada arranque de CentOS 8.

Iniciamos el servicio con el comando systemctl:

~$ sudo systemctl start postgresql

Si además quieres que PostgreSQL arranque automáticamente en cada inicio de CentOS 8, habrá también que habilitar el servicio:

~$ sudo systemctl enable postgresql

Podemos comprobar el estado del servicio PostgreSQL en cualquier momento mediante el comando systemctl status postgresql.

como instalar postgresql en centos 8 / centos stream 8

Cómo instalar el cliente de PostgreSQL en CentOS 8

Al instalar PostgreSQL Server en CentOS 8 se instala automáticamente como dependencia el cliente. En el caso de que sólo quieras instalar un cliente de PostgreSQL para CentOS 8 con el fin de acceder remotamente a otro servidor, por ejemplo, el paquete que debes instalar es postgresql:

~$ sudo yum install -y postgresql

Entre otros comandos y componentes, se instalará el cliente de consola psql.

Cómo acceder a PostgreSQL en CentOS 8

Debido al sistema de roles de PostgreSQL no es posible acceder directamente al servicio con los usuarios del sistema. El único rol que existe de forma predeterminada es postgres, para lo que la instalación de PostgreSQL ha creado también un usuario postgres de CentOS 8.

Por ello, la única forma de conectar a PostgreSQL con el cliente de consola psql es usando sudo y el usuario postgres:

~$ sudo -u postgres psql
psql (16.1)
Digite «help» para obtener ayuda.

postgres=#

postgresql en centos 8 / centos stream 8

Puedes cerrar el cliente con el comando \q o con exit.

Otra forma de acceder es crear un rol de PostgreSQL y una base de datos para nuestro usuario de trabajo de CentOS 8. Para esto tenemos los comandos createuser y createdb.

De nuevo utilizaremos el usuario postgres para crear el rol de nuestro usuario de trabajo:

~$ sudo -u postgres createuser --interactive -P instalador
Ingrese la contraseña para el nuevo rol:
Ingrésela nuevamente:
¿Será el nuevo rol un superusuario? (s/n) s
~$

Ahora ya podemos usar nuestro nuevo rol para crear la base de datos asociándola al rol de nuestro usuario:

~$ createdb instalador -O instalador

Podemos conectar localmente con nuestro usuario de CentOS 8 y su rol asociado lanzando el cliente psql sin más:

~$ psql
psql (16.1)
Digite «help» para obtener ayuda.

instalador=#

En este caso hemos creado un rol administrador, con lo que ya podremos crear otros roles con nuestro usuario de trabajo, sin tener que volver a usar el usuario postgres con sudo.

Habrás observado que aunque creamos nuestro rol con contraseña, no se nos ha solicitado al acceder. Esto sucede porque las conexiones locales se basan en el usuario de CentOS 8 que conecta, ya se supone que este usuario se ha autenticado en el sistema.

Cómo activar el uso de contraseñas de PostgreSQL en CentOS 8

Si deseas activar el uso de contraseñas de forma local, será necesario editar el archivo pg_hba.conf:

~$ sudo nano /var/lib/pgsql/data/pg_hba.conf

Buscamos esta línea:

...
# "local" is for Unix domain socket connections only
local   all             all                                     peer
...

Cambiaremos peer por md5 en PostgreSQL 10 ó scram-sha-256 en versiones superiores, para activar el uso de contraseñas locales, pero además añadiremos justo antes otra directiva local para dejar el comportamiento del usuario postgres intacto:

...
local   all             postgres                                peer
local   all             all                                     scram-sha-256
...

Guardamos los cambios del archivo pg_hba.conf y recargamos la configuración del servicio:

~$ sudo systemctl reload postgresql

Ahora, si usamos psql con nuestro rol se nos pedirá la contraseña:

~$ psql
Contraseña para usuario instalador:
psql (16.1)
Digite «help» para obtener ayuda.

instalador=#

Mientras que si accedemos con postgres seguirá sin necesitarla:

~$ sudo -u postgres psql
psql (16.1)
Digite «help» para obtener ayuda.

postgres=#

Crear bases de datos y usuarios para aplicaciones de terceros

En nuestro sitio web encontrarás tutoriales y guías de instalación en CentOS 8 de aplicaciones que trabajan sobre PostgreSQL, y suelen necesitar un usuario y una base de datos. Con nuestro rol administrador podemos crear fácilmente nuevos roles con contraseña:

~$ createuser -P appdb
Ingrese la contraseña para el nuevo rol:
Ingrésela nuevamente:
Contraseña:

Primero se nos solicita la contraseña y su confirmación para el nuevo rol, y a continuación debemos proporcionar la contraseña de nuestro rol administrador.

A continuación creamos la base de datos, asociándola al nuevo rol:

~$ createdb appdb -O appdb
Contraseña:

Igualmente se nos pide la contraseña.

A la hora de instalar o configurar la aplicación, especificaremos el rol, la contraseña y la base de datos que hemos creado expresamente para dicha aplicación.

Acceso remoto a PostgreSQL en CentOS 8

Por defecto el servicio PostgreSQL sólo admite conexiones locales, así que si queremos acceder remotamente tendremos que hacer algunos cambios en la configuración.

Editaremos el archivo de configuración:

~$ sudo nano /var/lib/pgsql/data/postgresql.conf

Y buscaremos la directiva listen_addresses:

...
# - Connection Settings -

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
                                        # comma-separated list of addresses;
                                        # defaults to 'localhost'; use '*' for $
                                        # (change requires restart)
...

La directiva se encuentra desactivada, por lo que se toma el valor por defecto, localhost. Podemos ver en los comentarios que el valor que necesitamos sería ‘*’ y que tal cambio exige reiniciar el servicio.

Así que activamos la directiva con el valor que nos interesa:

...
listen_addresses = '*'
...

Guardamos y cerramos el archivo.

No basta con este cambio, ya que hay que configurar el método de autenticación para los usuarios remotos. Para ello editaremos de nuevo el archivo pg_hba.conf y añadimos estas líneas al final del archivo (o al menos a continuación de las otras directivas host):

...
# Acceso remoto
host    all             all             all                     scram-sha-256

Al especificar md5 o scram-sha-256 como método de autenticación estamos indicando que los usuarios que conecten remotamente deberán identificarse con contraseña. Pero existen otras dos directivas host para conexiones locales vía TCP/IP:

...
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident
...

Podemos observar que la autenticación es del tipo ident, lo que causará problemas a aquellas aplicaciones locales que intenten conectar mediante contraseña. La solución sería cambiar la autenticación ident por md5 o scram-sha-256, o desactivar estas dos directivas, ya que la que acabamos de añadir es más general:

...
# IPv4 local connections:
#host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
#host    all             all             ::1/128                 ident
# Acceso remoto
host    all             all             all                     scram-sha-256
...

Guardamos los cambios, cerramos el archivo y reiniciamos PostgreSQL:

~$ sudo systemctl restart postgresql

Configurar el firewall de CentOS 8 para PostgreSQL

Lo habitual es que el firewall de CentOS 8 esté activado, así que para permitir conexiones al servicio PostgreSQL debemos añadir la excepción correspondiente:

~$ sudo firewall-cmd --permanent --add-service=postgresql

Y recargaremos la configuración del firewall para aplicar los cambios:

~$ sudo firewall-cmd --reload

Conectar de forma remota a PostgreSQL

Por fin podemos acceder desde el sistema remoto equipado con el cliente psql, indicando con el parámetro -h la dirección del servidor CentOS 8 y con el parámetro -U el rol con el que queremos conectar:

~$ psql -h centos8.local.lan -U instalador
Contraseña para usuario instalador:
psql (16.1)
Digite «help» para obtener ayuda.

instalador=#

como configurar postgresql en centos 8 / centos stream 8

Se nos pide la contraseña del rol que queremos usar y tras facilitarla podemos trabajar de forma interactiva como si lo estuviésemos haciendo en local.

Conclusión

Ahora ya sabes cómo instalar y configurar PostgreSQL Server en CentOS 8, cómo crear roles, bases de datos, administradores y trabajar local y remotamente. Ya estás listo para dar soporte a cualquier aplicación que trabaje sobre este potente motor de bases de datos en CentOS 8.

¡Apoya este sitio!

¿Te ha servido nuestra guía de instalación de este servicio de bases de datos para tu sistema? Si quieres agradecérnoslo, la más mínima aportación contribuye al mantenimiento de este sitio y la creación y elaboración de más guías y tutoriales.

Puedes ayudarnos dejando una propina de 1 $ desde PayPal:

O, si te sientes especialmente agradecido, puedes ayudarnos a un café:

¡Gracias!

Valora esta entrada

5/5 - (4 votos)

2 comentarios en «Cómo instalar PostgreSQL en CentOS 8»

Deja un comentario