Cómo instalar PostgreSQL en CentOS 7

En esta guía vamos a ver cómo instalar PostgreSQL en CentOS 7 paso a paso, para dar soporte a aquellos usuarios que necesitan integrar este motor de bases de datos de código abierto en sus sistemas. Al final de esta guía tendrás PostgreSQL funcionando en tu servidor o VPS CentOS, listo para trabajar con SQL desde el cliente de consola.

Antes de instalar PostgreSQL en CentOS 7

Para poder seguir esta guía de instalación de PostgreSQL en Linux CentOS 7 es necesario cumplir unos mínimos requisitos, poca cosa en realidad:

  • Un sistema Linux CentOS 7 actualizado.
  • Acceso por consola mediante un usuario con privilegios de sudo o root.
  • Conexión a Internet.

Si estás leyendo esta guía es prácticamente seguro que cumples estos requerimientos, así que abramos una consola de comandos y empecemos con el trabajo.

Cómo configurar el repositorio oficial de PostgreSQL en CentOS 7

Puesto que la versión disponible de PostgreSQL en el repositorio EPEL está bastante anticuada (la 9.2.24 en el momento de redactar esta guía), vamos a configurar el repositorio oficial de PostgreSQL en CentOS 7 para acceder a las versiones estables más recientes de este servicio de bases de datos.

Para ello, instalaremos el siguiente paquete:

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

Actualizaremos la información de los repositorios con yum para incluir los nuevos paquetes disponibles en el repositorio oficial de PostgreSQL:

~$ sudo yum update -y

Cómo instalar PostgreSQL en CentOS 7

Para instalar PosgtreSQL en CentOS 7 utilizando los paquetes disponibles en el nuevo repositorio que acabamos de configurar, hemos de tener en cuenta que existen varias versiones disponibles del servicio de bases de datos, concretamente las versiones 9.6, 10, 11, 12, 13 y 14.

Con las listas de paquetes actualizadas ya podemos instalar PostgreSQL. Instalaremos el paquete postgresqlXX-server (donde XX hace referencia a la versión que nos interese), entre cuyas dependencias se encuentra también el paquete con los clientes de consola:

~$ sudo yum -y install postgresql14-server

Una vez descargados e instalados los paquetes y dependencias se crea un nuevo servicio llamado postgresql-14 (para otras versiones el nombre del servicio termina en -9.6, -10, -11 , -12 ó -13). Este servicio NO se activa por defecto para iniciar con el sistema ni está en ejecución aún.

Cómo iniciar PostgreSQL Server en CentOS 7

Antes de poder activar el servicio es necesario inicializar los archivos y bases de datos de PostgreSQL, lo que haremos con el comando postgresql-XX-setup:

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

Hecho esto, podemos habilitar el servicio postgresql-XX para que inicie junto con CentOS 7:

~$ sudo systemctl enable postgresql-14

Ahora ya podemos por fin iniciar el servicio mediante el comando start de systemctl:

~$ sudo systemctl start postgresql-14

Y tendremos el servicio activado y en funcionamiento, cosa que podemos comprobar fácilmente con el comando systemctl status postgresql-14:

como instalar postgresql en centos 7

Justo lo que buscábamos. Vamos a ver alguna cosa más para conectar al servicio desde consola.

Cómo conectar al servicio PostgreSQL en CentOS 7

Durante la instalación se crean un grupo y un usuario postgres con los que funciona el servicio. En teoría nada impide que uses el usuario postgres para conectar con el servidor a través del cliente psql:

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

postgres=#

Puedes cerrar la sesión con el comando exit o \q:

postgres=# exit
~$

Pero lo habitual es que quieras trabajar con tu usuario de CentOS sin usar otro distinto mediante sudo.

PostgreSQL tiene la particularidad de que al iniciar sesión desde consola trata de asociar el usuario del sistema con un rol con el mismo nombre, conectándolo a una base de datos también con el mismo nombre.

Cómo crear un rol para tu usuario de CentOS

Vamos a empezar creando un rol de PostgreSQL con nuestro login de CentOS:

~$ sudo -u postgres -i createuser --interactive
Ingrese el nombre del rol a agregar: chacho
¿Será el nuevo rol un superusuario? (s/n) s

Ya hemos creado el rol chacho (mi usuario en CentOS 7 es chacho). Ahora creamos la base de datos para este nuevo rol, que debe llevar el mismo nombre:

~$ sudo -u postgres -i createdb chacho -O chacho

Hemos usado el argumento -O para que se conceda la propiedad de la base de datos a nuestro nuevo rol, porque por defecto sería propiedad del rol que la crea, que sería postgres en este caso.

Tenemos todo lo que necesitamos, por lo que podemos usar el cliente psql desde consola con nuestro propio usuario:

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

chacho=#

Ahora podemos empezar a trabajar con sentencias SQL ya sea creando tablas, insertando datos, etc.

Pero también es importante saber hacer esto porque muchas veces necesitamos instalar algún tipo de aplicación, framework, CMS, etc. que se apoya sobre PostgreSQL y requiere su propio rol y base de datos para efectuar la instalación.

Cómo acceder a PostgreSQL en CentOS 7

En la mayoría de escenarios necesitaremos proteger el acceso al servicio PostgreSQL mediante contraseña. Para crear una contraseña para nuestro usuario iniciaremos sesión con el cliente de consola psql y emplearemos el comando \password:

...
=# \password
Ingrese la nueva contraseña:
Ingrésela nuevamente:
=#

Además, si nuestro usuario tiene nivel de administración, podremos crear contraseñas para otros roles:

-# \password paco

En cualquier caso, no basta con crear las contraseñas, sino que también habrá que configurar PostgreSQL para que utilice este sistema de autenticación. Para ello, editaremos el archivo pg_hba.conf:

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

Buscaremos la línea que empieza por local referida a las conexiones locales a través de sockets de Unix:

...
local   all             all                                     peer
...

Modificaremos esta línea para que en vez de utilizar la autenticación por sockets se use la autenticación por contraseña:

...
local   all             all                                     scram-sha-256
...

Si quieres que el usuario postgres se comporte como hasta ahora, es decir, no sea necesario que use contraseña, antes de esa línea añadiremos una similar para postgres:

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

Si te decides a añadir esta configuración para postgres es importante el orden, ya que PostgreSQL evalúa sus archivos de configuración desde el final hacia el principio. Por tanto, en el caso anterior primero se evalúa la segunda línea local (se usará contraseña para todos los usuarios) y después la primera (el usuario postgres se autenticará por el método peer). Si se invirtiese el orden de las líneas la configuración particular para postgres quedaría invalidada por la configuración general.

Guardamos los cambios, cerramos el archivo y reiniciamos el servicio PostgreSQL para aplicar los cambios:

~$ sudo systemctl restart postgresql-14

Ahora al conectar a PostgreSQL con el cliente psql se nos solicitará la contraseña del rol asociado al usuario:

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

chacho=#

Justo lo que queríamos.

Acceso local por TCP/IP

Muchas aplicaciones basadas en PostgreSQL acceden localmente usando la pila TCP/IP, es decir, conectando por red en lugar de conexiones tipo Unix.

Con la configuración por defecto de las versiones de PostgreSQL para CentOS 7 anteriores a la 13, estos intentos de conexión fallarán, ya que necesitan un ajuste adicional por realizar en pg_hba.conf:

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

Buscaremos esta sección:

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

Tendremos que sustituir la autenticación ident por md5:

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

Guardados los cambios, habrá que recargar la configuración del servicio:

~$ sudo systemctl reload postgresql-xx

Conclusión

Ahora que ya sabes cómo instalar PostgreSQL en Linux CentOS 7 puedes dejar el servicio listo para trabajar con otros sistemas y aplicaciones, o para desarrollar tu propia base de datos. Empezar a trabajar con este sistema puede ser un poco más engorroso si estabas acostumbrado a otros motores como MySQL o MariaDB, pero una vez aclarados los pasos iniciales el trabajo diario es similar.

¿Tienes alguna duda o pregunta? ¿Alguna sugerencia o has apreciado algún error y quieres notificarlo? No dudes en dejar un comentario.

¡Apoya este sitio!

¿Estabas atascado con la instalación de PostgreSQL en CentOS 7? ¿No lograbas iniciar el servidor o conectar con el cliente? Si has conseguido salir del callejón sin salida, quizás desees agradecérnoslo con una mínima donación para el mantenimiento de este sitio, promover nuevas guías y, dado que pasamos demasiadas horas sentados, mejorar nuestra salud con un escritorio para trabajar de pie en la oficina.

Puedes ayudarnos dejando una propina de 1 $ en PayPal:

O, si te sientes especialmente generoso, invitándonos a un café:

¡Gracias!

NOTA: El nuevo escritorio en el que habíamos pensado para la oficina es este, ¿qué opinas?

Valora este sitio

5/5 - (5 votos)

9 comentarios en «Cómo instalar PostgreSQL en CentOS 7»

  1. Buenas tardes,

    Gracias por el documento, super bueno. Soy nuevo y necesito instalar un cluster de PostgreSQL. Inicialmente estuve leyendo sobre dejar uno activo y que replique los cambios sobre el segundo nodo.

    ¿Tienes alguna documentación al respecto?

    De antemano, muchas gracias.

    Responder
  2. Buenas, soy nuevo en PostgreSQL, primero felicitaciones por tan buen material y bien explicado. Realicé todo el procedimiento, pero cuando ejecuto [root@localhost ~]# su – postgres va directo a -bash-4.2$ y necesito que cuando ejecute su – postgres cambie al usuario postgres [postgres@localhost ~]$. Saludos y gracias de antemano.

    Responder
    • Hola, Jose. Dos cosas. El usuario postgres no está pensado para trabajar como tú quieres, con su –, sino con sudo -u, para realizar las tareas imprescindibles o procesos del sistema, de hecho, por eso en esta guía te mostramos cómo crear un rol superusuario para tu usuario de trabajo. Lo segundo es que en realidad sí está funcionando el inicio de sesión (imagino que has creado una contraseña), pero si echas un vistazo al archivo /etc/passwd verás que el directorio de usuario de postgres es el directorio de datos de PostgreSQL:

      postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash

      En ese directorio no existen archivos de configuración (como .bashrc) que configuran entre otras cosas el aspecto del prompt. Podrías crearlos, pero no tiene sentido hacerlo ni tomarte tantas molestias porque en realidad no necesitas trabajar con ese usuario.

      Responder
      • Buenos días, gracias por su oportuna repuesta, la situación es la siguiente, estoy instalando pgpool y el manual dice que debo ejecutar algunos comandos como estos:
        [root@centos7 ~]# su – postgres
        [postgres@centos7 ~]$ mkdir /var/lib/pgsql/archivedir

        Ok.
        Ejecuto vi /etc/passwd en los dos servidores y el usuario postgres está igual en los dos servidores, es decir así:
        postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
        Ejecuto en server1:
        [root@server1~]# su – postgres
        Último inicio de sesión:mié ago 4 12:04:41 CEST 2021en pts/0
        [postgres@server1 ~]$

        Pero en server2:
        [root@server2 ~]# su – postgres
        Último inicio de sesión:sáb dic 21 08:58:24 CET 2019en pts/0
        -bash-4.2$

        Es decir, en server2 no va el usuario postgres [postgres@server1 ~]$ como sí lo hace en server1.
        Entiendo que la manera como dice el manual de pgpool, es para poder navegar en los directorios con el usuario postgres.
        Gracias de antemano, como te comenté soy nuevo en PostgreSQL.

        Responder
        • Como ya te indiqué, sí que está funcionando en server2, lo único que ocurre es que por lo que sea no existe configuración de Bash para el usuario postgres. Aunque no muestre el prompt como en server1 puedes trabajar igualmente. De hecho puedes comprobar que inicias sesión en el directorio correcto con el comando pwd.

          Responder

Deja un comentario