Cómo instalar PostgreSQL en CentOS 8

Vamos a ver en esta entrada cómo instalar PostgreSQL en CentOS 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

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 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 si usamos los paqetes disponibles en los repositorios de la distribución obtendremos la versión 10.6 de este servicio, mientras que la última versión estable (en el momento de redactar este artículo) es PostgreSQL 12.3. Por tanto es una opción a tener en cuenta instalar la versión del repositorio oficial.

Sáltate el siguiente paso si te basta con la versión de PostgreSQL disponible en el repositorio de CentOS 8.

Cómo configurar el repositorio de PostgreSQL para CentOS 8

Instalaremos el paquete que creará el nuevo repositorio:

~$ sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Ahora desactivaremos el módulo de PostgreSQL de los repositorios de CentOS 8:

~$ sudo yum -qy module disable postgresql

¡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

Para instalar PostgreSQL desde el repositorio oficial, necesitaremos el paquete postgresql12-server:

~$ sudo yum install -y postgresql12-server

Si optamos por la versión de la distribución, el paquete que necesitamos es postgresql-server:

~$ sudo yum install -y postgresql-server

Inicialización del servicio

Antes de lanzar el servicio es necesario inicializarlo. Para PostgreSQL 12 usaremos el comando postgresql-12-setup:

~$ sudo /usr/pgsql-12/bin/postgresql-12-setup initdb

Mientras que para PostgreSQL 10.6 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-12.service o postgresql.service (postgresql-12 o postgresql si prefieres el nombre corto), dependiendo del origen de los paquetes.

En cualquier caso el servicio no inicia tras la instalación ni queda habilitado para iniciar automáticamente en cada arranque de CentOS 8.

Hecho esto es el momento de iniciar PostgreSQL, por ejemplo para la versión 12:

~$ sudo systemctl start postgresql-12

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

~$ sudo systemctl enable postgresql-12

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

como instalar postgresql en centos 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-12 o postgresql (10.6):

~$ sudo yum install -y postgresql12

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 -i psql
psql (12.3)
Digite «help» para obtener ayuda.

postgres=#

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 -i createuser --interactive -P chacho
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 chacho -O chacho

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

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

chacho=#

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/12/data/pg_hba.conf

O:

 ~$ 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 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                                     md5
...

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

~$ sudo systemctl reload postgresql-12

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

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

chacho=#

Mientras que si accedemos con postgres seguirá sin necesitarla:

~$ sudo -u postgres -i psql
psql (12.3)
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, para PostgreSQL 12:

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

O para PostgreSQL 10.6:

~$ 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                     md5

Al especificar md5 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 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                     md5
...

Guardamos los cambios, cerramos el archivo y reiniciamos PostgreSQL:

~$ sudo systemctl restart postgresql-12

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 -U chacho
Contraseña para usuario chacho:
psql (12.3)
Digite «help» para obtener ayuda.

chacho=#

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 esta guía de instalación de PostgreSQL en CentOS 8? Pues si quisieras 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. Y puedes colaborar invitándome a un café:

 

Dejando una propina de 1 $ desde PayPal:

 

O aprovechando estas fantásticas ofertas:

¡Gracias!

Valora esta entrada

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (9 votos, promedio: 4,89 de 5)
Cargando…

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies.

ACEPTAR
Aviso de cookies