Introducción
PostgreSQL o Postgres es un sistema de administración de bases de datos relacionales de objetos de uso general de código abierto con muchas características avanzadas que le permite crear entornos tolerantes a fallas o aplicaciones complejas.
En esta guía, discutiremos cómo instalar el servidor de base de datos PostgreSQL en CentOS 8. Antes de elegir qué versión instalar, asegúrese de que sus aplicaciones lo admitan.
También exploraremos los conceptos básicos de la administración de bases de datos PostgreSQL.
Prerrequisitos
Para instalar los paquetes, debe iniciar sesión como root o usuario con privilegios de sudo.
Si desea instalar PostgreSQL en un servidor remoto, continúe leyendo; de lo contrario, omita el primer párrafo "Conectando al servidor" y lea el siguiente.
Conexión al servidor
Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:
ssh root@IP_DEL_SERVER
A continuación, deberá ingresar la contraseña del usuario root.
Si no está utilizando el usuario root, puede iniciar sesión con otro nombre de usuario utilizando el mismo comando, luego cambie root a su nombre de usuario:
ssh nome_utente@IP_DEL_SERVER
Luego se le pedirá que ingrese su contraseña de usuario.
El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Instalar PostgreSQL en CentOS 8
Al momento de escribir este artículo, hay dos versiones del servidor PostgreSQL disponibles para la instalación desde los repositorios estándar de CentOS: la versión 9.6 y 10.0.
Para enumerar los flujos de módulos de PostgreSQL disponibles, escriba:
dnf module list postgresql
La salida muestra que el módulo postgresql está disponible con dos flujos. Cada flujo tiene dos perfiles: servidor y cliente. La secuencia 10 con el servidor de perfiles es la predeterminada:
CentOS-8 - AppStream
Name Stream Profiles Summary
postgresql 10 [d] client, server [d] PostgreSQL server and client module
postgresql 9.6 client, server [d] PostgreSQL server and client module
Para instalar la secuencia predeterminada, escriba la versión 10.0 del servidor PostgreSQL:
sudo dnf install @postgresql:10
Para instalar el servidor PostgreSQL versión 9.6, escriba:
sudo dnf install @postgresql:9.6
Es posible que también desee instalar el paquete contrib, que proporciona varias características adicionales para la base de datos PostgreSQL:
sudo dnf install postgresql-contrib
Una vez que se complete la instalación, inicialice la base de datos PostgreSQL con el siguiente comando:
sudo postgresql-setup initdb
Initializing database... OK
Inicie el servicio PostgreSQL y habilítelo para que se inicie automáticamente al iniciar el sistema:
sudo systemctl enable --now postgresql
Utilice la psql
para verificar la instalación conectándose al servidor de base de datos PostgreSQL e imprimiendo la versión:
sudo -u postgres psql -c "SELECT version();"
PostgreSQL 10.6 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 8.2.1 20180905 (Red H
at 8.2.1-3), 64-bit
Métodos y roles de autenticación de PostgreSQL
PostgreSQL administra los permisos de acceso a la base de datos utilizando el concepto de roles. Un rol puede representar un usuario de base de datos o un grupo de usuarios de base de datos.
PostgreSQL admite varios métodos de autenticación. Los métodos más utilizados son:
- Confianza: un rol que puede conectarse sin contraseña, siempre que se cumplan las condiciones definidas en
pg_hba.conf
. - Contraseña: un rol puede conectarse proporcionando una contraseña. Las contraseñas se pueden almacenar como
scram-sha-256
,md5
ypassword
(en texto sin cifrar). - Ident: solo se admite en conexiones TCP /IP. Funciona al obtener el nombre de usuario del sistema operativo del cliente, con una asignación de nombre de usuario opcional.
- Peer: idéntico a Ident, pero solo se admite en conexiones locales.
La autenticación del cliente PostgreSQL se define en el pg_hba.conf
configuración llamado pg_hba.conf. De forma predeterminada, para las conexiones locales, PostgreSQL está configurado para utilizar el método de autenticación de pares.
El postgres
se crea automáticamente cuando instala el servidor PostgreSQL. Este usuario es el superusuario de la instancia de PostgreSQL. Es equivalente al usuario root de MySQL.
Para iniciar sesión en el servidor PostgreSQL como postgres
usuario, usuario el cambio y luego acceder a la línea de PostgreSQL usando el psql
utilidad:
sudo su - postgres
psql
Desde aquí, puede interactuar con la instancia de PostgreSQL. Para salir del shell de PostgreSQL, escriba:
\q
Después de salir del shell de PostgreSQL, vuelva a su usuario original:
exit
También puede acceder al indicador de PostgreSQL sin cambiar de usuario con el comando sudo
sudo -u postgres psql
Normalmente, el postgres
es utilizado solo por el host local.
Crear una base de datos y un rol de PostgreSQL
Solo el superusuario y los roles con CREATEROLE
pueden crear nuevos roles.
En el siguiente ejemplo, crearemos un nuevo rol llamado alice
, una base de datos llamada alicedb
y otorgaremos privilegios en la base de datos.
Primero, conéctese al shell de PostgreSQL:
sudo -u postgres psql
Cree un nuevo rol de PostgreSQL con el siguiente comando:
create role alice;
Crea una nueva base de datos:
create database alicedb;
Otorgue privilegios de usuario en la base de datos ejecutando la siguiente consulta:
grant all privileges on database alicedb to alice;
Habilite el acceso remoto al servidor PostgreSQL
De forma predeterminada, el servidor PostgreSQL solo escucha en la interfaz 127.0.0.1
Instale el editor de texto nano o utilice el editor vi predeterminado:
sudo dnf install nano
Para habilitar el acceso remoto a su servidor PostgreSQL, abra el archivo de configuración:
sudo nano /var/lib/pgsql/data/postgresql.conf
Desplácese hacia abajo hasta la CONNECTIONS AND AUTHENTICATION
y agregue /edite la línea listen_addresses, así:
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
Guarde el archivo y reinicie el servicio PostgreSQL con:
sudo systemctl restart postgresql
Verifique los cambios con la utilidad ss
ss -nlt | grep 5432
LISTEN 0 128 0.0.0.0:5432 0.0.0.0:*
LISTEN 0 128 [::]:5432 [::]:*
El resultado anterior muestra que el servidor PostgreSQL está escuchando en el puerto predeterminado en todas las interfaces (0.0.0.0).
El último paso es configurar el servidor para aceptar conexiones remotas editando el pg_hba.conf
.
A continuación, se muestran algunos ejemplos que muestran diferentes casos de uso:
sudo nano /var/lib/pgsql/data/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# The user jane can access all databases from all locations using an md5 password
host all alice 0.0.0.0/0 md5
# The user jane can access only the janedb database from all locations using an md5 password
host alicedb alice 0.0.0.0/0 md5
# The user jane can access all databases from a trusted location (192.168.1.134) without a password
host all alice 192.168.21.21 trust
Conclusión
CentOS 8 ofrece dos versiones de PostgreSQL: 9.6 y 10.0.
Para obtener más información sobre este tema, consulte la documentación de PostgreSQL.