PostgreSQL o Postgres es un sistema de administración de base de datos relacional de objetos de uso general y código abierto con muchas características avanzadas que le permiten 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 la admitan.
También exploraremos los conceptos básicos de la administración de bases de datos PostgreSQL.
Requisitos previos #
Para poder instalar paquetes, debe iniciar sesión como root o usuario con privilegios sudo.
Instalando PostgreSQL en CentOS 8 #
Al momento de escribir este artículo, hay dos versiones del servidor PostgreSQL disponibles para instalar desde los repositorios estándar de CentOS:versión 9.6 y 10.0.
Para enumerar las secuencias de módulos de PostgreSQL disponibles, escriba:
dnf module list postgresql
El resultado 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
También es posible que desee instalar el paquete contrib que proporciona varias funciones adicionales para el sistema de base de datos PostgreSQL.
sudo dnf install postgresql-contrib
Una vez completada 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 en el arranque:
sudo systemctl enable --now postgresql
Usa el psql
herramienta para verificar la instalación conectándose al servidor de base de datos PostgreSQL e imprimir su 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 Hat 8.2.1-3), 64-bit
Roles de PostgreSQL y métodos de autenticación #
PostgreSQL maneja los permisos de acceso a la base de datos usando el concepto de roles. Un rol puede representar a un usuario de la base de datos o a un grupo de usuarios de la base de datos.
PostgreSQL admite múltiples métodos de autenticación. Los métodos más utilizados son:
- Confianza:un rol puede conectarse sin contraseña, siempre que se cumplan las condiciones definidas en
pg_hba.conf
se cumplen. - Contraseña:un rol puede conectarse proporcionando una contraseña. Las contraseñas se pueden almacenar como
scram-sha-256
,md5
ypassword
(texto claro). - Ident:solo se admite en conexiones TCP/IP. Funciona obteniendo el nombre de usuario del sistema operativo del cliente, con una asignación de nombre de usuario opcional.
- Peer:igual que Ident, pero solo se admite en conexiones locales.
La autenticación del cliente PostgreSQL se define en el archivo de configuración llamado pg_hba.conf
. De forma predeterminada, para las conexiones locales, PostgreSQL está configurado para usar el método de autenticación de pares.
El postgres
El usuario 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, primero cambie al usuario y luego acceda al indicador 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
También puede acceder al indicador de PostgreSQL sin cambiar de usuario con sudo
comando:
sudo -u postgres psql
Normalmente el postgres
el usuario se usa solo desde el host local.
Creación de rol y base de datos de PostgreSQL #
Solo superusuarios y roles con CREATEROLE
privilegio puede crear nuevos roles.
En el siguiente ejemplo, crearemos un nuevo rol llamado john
, una base de datos llamada johndb
y otorgar privilegios en la base de datos.
-
Primero, conéctese al shell de PostgreSQL:
sudo -u postgres psql
-
Cree un nuevo rol de PostgreSQL usando el siguiente comando:
CREATE ROLE john;
-
Crear una nueva base de datos:
CREATE DATABASE johndb;
-
Otorgue privilegios al usuario en la base de datos ejecutando la siguiente consulta:
GRANT ALL PRIVILEGES ON DATABASE johndb TO john;
Habilitar el acceso remoto al servidor PostgreSQL #
De forma predeterminada, el servidor PostgreSQL solo escucha en la interfaz local 127.0.0.1
.
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 CONNECTIONS AND AUTHENTICATION
sección y agregue/edite la siguiente línea:
#------------------------------------------------------------------------------
# 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
Verifica los cambios con el ss
utilidad:
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
archivo.
A continuación se muestran algunos ejemplos que muestran diferentes casos de uso:
/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 jane 0.0.0.0/0 md5
# The user jane can access only the janedb database from all locations using an md5 password
host janedb jane 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 jane 192.168.1.134 trust