Cómo instalar y utilizar PostgreSQL en CentOS 8

Introducción
Los sistemas de gestión de bases de datos relacionales son un componente clave de muchos sitios web y aplicaciones. Ofrecen una forma estructurada de almacenar, organizar y acceder a la información.
PostgreSQL, también conocido como Postgres, es un sistema de gestión de bases de datos relacionales que proporciona una implementación del lenguaje de consulta estructurado, más conocido como SQL. Lo utilizan muchos proyectos populares, tanto grandes como pequeños, cumple con los estándares y tiene muchas funciones avanzadas, como transacciones confiables y concurrencia sin bloqueos de lectura.
Si sigue esta guía, instalará la última versión de PostgreSQL en un servidor CentOS 8.
Prerrequisitos
Para completar este tutorial, necesitará un servidor que ejecute CentOS 8. Este servidor debe tener un usuario no root con privilegios administrativos y un firewall configurado con firewalld
. Para configurarlo, consulte nuestra guía de configuración inicial del servidor para CentOS 8.
Paso 1: Instalación de PostgreSQL
PostgreSQL está disponible en el repositorio de software AppStream predeterminado de CentOS 8 y existen varias versiones que puedes instalar. Puedes elegir entre estas versiones habilitando la colección adecuada de paquetes y dependencias que se alineen con la versión que deseas instalar; cada colección se denomina flujo de módulo.
En DNF, el administrador de paquetes predeterminado de CentOS 8, los módulos son colecciones especiales de paquetes RPM que juntos forman una aplicación más grande. Esto tiene como objetivo hacer que la instalación de paquetes y sus dependencias sea más intuitiva para los usuarios.
Enumere las transmisiones disponibles para el postgresql
módulo utilizando el dnf
comando:
- dnf module list postgresql
Outputpostgresql 9.6 client, server [d] PostgreSQL server and client module postgresql 10 [d] client, server [d] PostgreSQL server and client module postgresql 12 client, server PostgreSQL server and client module
En este resultado, puede ver que hay tres versiones de PostgreSQL disponibles en el repositorio de AppStream9.6
: , 10
y 12
. El flujo que proporciona la versión 10 de Postgres es el predeterminado, como se indica en el [d]
siguiente it. Si desea instalar esa versión, puede simplemente ejecutar sudo dnf install postgresql-server
y continuar con el siguiente paso. Sin embargo, aunque la versión 10 aún se mantiene, este tutorial instalará la versión 12 de Postgres, la última versión al momento de escribir este artículo.
Para instalar la versión 12 de PostgreSQL, debe habilitar el flujo de módulos de esa versión. Cuando habilita un flujo de módulos, anula el flujo predeterminado y hace que todos los paquetes relacionados con el flujo habilitado estén disponibles en el sistema. Tenga en cuenta que solo se puede habilitar un flujo de un módulo determinado en un sistema al mismo tiempo.
Para habilitar la transmisión del módulo para la versión 12 de Postgres, ejecute el siguiente comando:
- sudo dnf module enable postgresql:12
Cuando se le solicite, presione y
y luego ENTER
para confirmar que desea habilitar la transmisión:
Output==================================================================== Package Architecture Version Repository Size====================================================================Enabling module streams: postgresql 12 Transaction Summary====================================================================Is this ok [y/N]: y
Después de habilitar el flujo del módulo de la versión 12, puede instalar el postgresql-server
paquete para instalar PostgreSQL 12 y todas sus dependencias:
- sudo dnf install postgresql-server
Cuando se le solicite, confirme la instalación presionando y
y luego ENTER
:
Output. . .Install 4 PackagesTotal download size: 16 MInstalled size: 62 MIs this ok [y/N]: y
Ahora que el software está instalado, realizará algunos pasos de inicialización para preparar un nuevo clúster de base de datos para PostgreSQL.
Paso 2: creación de un nuevo clúster de base de datos PostgreSQL
Debe crear un nuevo clúster de base de datos PostgreSQL antes de poder comenzar a crear tablas y cargarlas con datos. Un clúster de base de datos es una colección de bases de datos administradas por una única instancia de servidor. La creación de un clúster de base de datos consiste en crear los directorios en los que se colocarán los datos de la base de datos, generar las tablas de catálogo compartidas y crear las bases de datos template1
y postgres
.
La template1
base de datos es una especie de plantilla que se utiliza para crear nuevas bases de datos; todo lo que se almacena en template1
, incluso los objetos que usted mismo agrega, se colocarán en nuevas bases de datos cuando se creen. La postgres
base de datos es una base de datos predeterminada diseñada para que la utilicen los usuarios, las utilidades y las aplicaciones de terceros.
El paquete Postgres que instalamos en el paso anterior incluye un script útil llamado postgresql-setup
que ayuda con la administración de clústeres de bases de datos de bajo nivel. Para crear un clúster de bases de datos, ejecute el script usando sudo
y con la --initdb
opción:
- sudo postgresql-setup --initdb
Verá el siguiente resultado:
Output * Initializing database in '/var/lib/pgsql/data' * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
Ahora inicie el servicio PostgreSQL usando systemctl
:
- sudo systemctl start postgresql
Luego, use systemctl
una vez más para permitir que el servicio se inicie cada vez que se inicie el servidor:
- sudo systemctl enable postgresql
Esto dará el siguiente resultado
OutputCreated symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.
Ahora que PostgreSQL está en funcionamiento, repasaremos el uso de roles para aprender cómo funciona Postgres y en qué se diferencia de sistemas de administración de bases de datos similares que pueda haber utilizado en el pasado.
Paso 3: Uso de roles y bases de datos de PostgreSQL
PostgreSQL utiliza un concepto denominado roles para gestionar la autenticación y autorización de clientes. En algunos aspectos, son similares a las cuentas comunes de estilo Unix, pero Postgres no distingue entre usuarios y grupos y, en su lugar, prefiere el término rol, que es más flexible.
Tras la instalación, Postgres se configura para utilizar la autenticación de identidad, lo que significa que asocia los roles de Postgres con una cuenta de sistema Unix/Linux correspondiente. Si existe un rol dentro de Postgres, un nombre de usuario Unix/Linux con el mismo nombre puede iniciar sesión como ese rol.
El procedimiento de instalación creó una cuenta de usuario denominada postgres que está asociada con el postgres
rol predeterminado. Para utilizar PostgreSQL, puede iniciar sesión en esa cuenta.
Hay algunas formas de utilizar esta cuenta para acceder al indicador de PostgreSQL.
Cambiar a la cuenta de postgres
Cambie a la cuenta postgres en su servidor escribiendo:
- sudo -i -u postgres
Ahora puede acceder a un indicador de Postgres inmediatamente escribiendo:
- psql
Esto le permitirá iniciar sesión en el indicador de PostgreSQL y desde aquí podrá interactuar con el sistema de administración de base de datos de inmediato.
Salga del indicador de PostgreSQL escribiendo:
- q
Esto lo llevará de regreso al símbolo del sistema de Linux de la cuenta de postgres . Ahora regrese a su cuenta original con lo siguiente:
- exit
Cómo acceder a un indicador de Postgres sin cambiar de cuenta
También puedes ejecutar comandos con la cuenta postgres directamente usando sudo
.
Por ejemplo, en el ejemplo anterior, se le indicó que accediera al indicador de Postgres cambiando primero al usuario postgres y luego ejecutando psql
para abrir el indicador de Postgres. Como alternativa, podría hacer esto en un solo paso ejecutando el comando único psql
como usuario postgres con sudo
, de esta manera:
- sudo -u postgres psql
Esto le permitirá iniciar sesión directamente en Postgres sin el bash
shell intermediario.
Nuevamente, puedes salir de la sesión interactiva de Postgres escribiendo:
- q
En este paso, utilizó la cuenta de Postgres para acceder al psql
indicador. Sin embargo, muchos casos de uso requieren más de un rol de Postgres. Siga leyendo para aprender a configurar nuevos roles.
Paso 4: creación de un nuevo rol
Actualmente, solo tiene configurado el rol postgres dentro de la base de datos. Puede crear nuevos roles desde la línea de comandos con el createrole
comando. La --interactive
bandera le solicitará el nombre del nuevo rol y también le preguntará si debe tener permisos de superusuario.
Si ha iniciado sesión con la cuenta de postgres , puede crear un nuevo usuario escribiendo:
- createuser --interactive
Si, en cambio, prefieres utilizar sudo
para cada comando sin cambiar de cuenta normal, escribe:
- sudo -u postgres createuser --interactive
El script le ofrecerá algunas opciones y, en función de sus respuestas, ejecutará los comandos Postgres necesarios para crear un usuario según sus especificaciones. Para este tutorial, cree un rol llamado sammy y otórguele privilegios de superusuario ingresando lo siguiente y
cuando se le solicite:
OutputEnter name of role to add: sammyShall the new role be a superuser? (y/n) y
Puedes obtener más control si pasas algunas banderas adicionales. Consulta las opciones en la man
página createuser
:
- man createuser
Su instalación de Postgres ahora tiene una nueva función, pero aún no ha agregado ninguna base de datos. La siguiente sección describe este proceso.
Paso 5: Creación de una nueva base de datos
Otra suposición que el sistema de autenticación de Postgres hace de forma predeterminada es que para cualquier rol utilizado para iniciar sesión, ese rol tendrá una base de datos con el mismo nombre a la que puede acceder.
Esto significa que si el usuario que creaste en la última sección se llama sammy , ese rol intentará conectarse a una base de datos que también se llama sammy
de manera predeterminada. Puedes crear una base de datos de este tipo con el createdb
comando.
Si ha iniciado sesión como cuenta de postgres , deberá escribir algo como:
- createdb sammy
Si, en cambio, prefieres usar sudo
for each command sin cambiar de tu cuenta normal, deberás escribir:
- sudo -u postgres createdb sammy
Esta flexibilidad proporciona múltiples rutas para crear bases de datos según sea necesario.
Ahora que ha creado una nueva base de datos, iniciará sesión en ella con su nuevo rol.
Paso 6: Apertura de un mensaje de Postgres con el nuevo rol
Para iniciar sesión con autenticación basada en identidad, necesitará un usuario de Linux con el mismo nombre que su rol y base de datos de Postgres.
Si no tienes un usuario Linux disponible, puedes crear uno con el adduser
comando. Tendrás que hacerlo desde una cuenta que no sea rootsudo
y que tenga privilegios (es decir, que no hayas iniciado sesión como usuario de postgres ):
- sudo adduser sammy
Una vez que esta nueva cuenta esté disponible, puedes cambiarla y luego conectarte a la base de datos escribiendo primero:
- sudo -i -u sammy
- psql
O puedes hacer esto en línea:
- sudo -u sammy psql
Este comando le permitirá iniciar sesión automáticamente.
Si desea que su usuario se conecte a una base de datos diferente, puede hacerlo incluyendo la -d
bandera y especificando la base de datos, de esta manera:
- psql -d postgres
Una vez que haya iniciado sesión, puede verificar su información de conexión actual escribiendo:
- conninfo
Esto mostrará el siguiente resultado:
OutputYou are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".
Esto es útil si se conecta a bases de datos no predeterminadas o con usuarios no predeterminados.
Una vez conectado a su base de datos, ahora puede intentar crear y eliminar tablas.
Paso 7: creación y eliminación de tablas
Ahora que sabe cómo conectarse al sistema de base de datos PostgreSQL, puede aprender algunas tareas básicas de administración de Postgres.
Primero, crea una tabla para almacenar algunos datos. Por ejemplo, crearás una tabla que describa algunos equipos de juegos.
La sintaxis básica de este comando es la siguiente:
CREATE TABLE table_name ( column_name1 col_type (field_length) column_constraints, column_name2 col_type (field_length), column_name3 col_type (field_length));
Estos comandos le dan un nombre a la tabla y luego definen las columnas, así como el tipo de columna y la longitud máxima de los datos del campo. También puede agregar restricciones de tabla para cada columna de manera opcional.
Para fines de demostración, cree una tabla simple como esta:
- CREATE TABLE playground (
- equip_id serial PRIMARY KEY,
- type varchar (50) NOT NULL,
- color varchar (25) NOT NULL,
- location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
- install_date date
- );
Este comando creará una tabla que incluye el inventario de los equipos de juegos. Comienza con un ID de equipo, que es del serial
tipo. Este tipo de datos es un entero de incremento automático. También le ha dado a esta columna la restricción de PRIMARY KEY
, lo que significa que los valores deben ser únicos y no nulos.
Para dos de las columnas ( equip_id
y install_date
), el comando no especifica una longitud de campo. Esto se debe a que algunos tipos de columnas no requieren una longitud definida porque la longitud está implícita en el tipo.
Las dos líneas siguientes crean columnas para el equipo type
y color
respectivamente, cada una de las cuales no puede estar vacía. La línea después de estas crea una location
columna y una restricción que requiere que el valor sea uno de ocho valores posibles. La última línea crea una columna de fecha que registra la fecha en la que instaló el equipo.
Puedes ver tu nueva tabla escribiendo:
- d
Esto mostrará el siguiente resultado:
Output List of relations Schema | Name | Type | Owner --------+-------------------------+----------+------- public | playground | table | sammy public | playground_equip_id_seq | sequence | sammy(2 rows)
Aquí está tu tabla de juegos, pero también hay algo llamado playground_equip_id_seq
que es del tipo sequence
. Esta es una representación del serial
tipo que le diste a tu equip_id
columna. Esto hace un seguimiento del siguiente número en la secuencia y se crea automáticamente para columnas de este tipo.
Si desea ver solo la tabla sin la secuencia, puede escribir:
- dt
Esto producirá lo siguiente:
Output List of relations Schema | Name | Type | Owner --------+------------+-------+------- public | playground | table | sammy(1 row)
En este paso, creó una tabla de muestra. En el siguiente paso, intentará agregar, consultar y eliminar entradas en esa tabla.
Paso 8: agregar, consultar y eliminar datos en una tabla
Ahora que tienes una tabla, puedes insertar algunos datos en ella.
A modo de ejemplo, agregue una diapositiva y un columpio llamando a la tabla que desea agregar, nombrando las columnas y luego proporcionando datos para cada columna, de la siguiente manera:
- INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
- INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');
Debe tener cuidado al ingresar los datos para evitar algunos errores comunes. Por un lado, no coloque los nombres de las columnas entre comillas, pero los valores de las columnas que ingrese sí deben estar entre comillas.
Otra cosa que hay que tener en cuenta es que no se debe introducir un valor para la equip_id
columna, ya que este se genera automáticamente cada vez que se crea una nueva fila en la tabla.
Recupere la información que ha agregado escribiendo:
- SELECT * FROM playground;
Verá el siguiente resultado:
Output equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 1 | slide | blue | south | 2017-04-28 2 | swing | yellow | northwest | 2018-08-16(2 rows)
Aquí puedes ver que tu equip_id
formulario se ha completado correctamente y que todos los demás datos se han organizado correctamente.
Si el tobogán del patio de juegos se rompe y tienes que quitarlo, también puedes eliminar la fila de tu mesa escribiendo:
- DELETE FROM playground WHERE type = 'slide';
Consulta la tabla nuevamente:
- SELECT * FROM playground;
Verás lo siguiente:
Output equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2018-08-16(1 row)
Tenga en cuenta que su diapositiva ya no es parte de la tabla.
Ahora que ha agregado y eliminado entradas en su tabla, puede intentar agregar y eliminar columnas.
Paso 9: Agregar y eliminar columnas de una tabla
Después de crear una tabla, puede modificarla para agregar o quitar columnas. Agregue una columna para mostrar la última visita de mantenimiento de cada equipo escribiendo lo siguiente:
- ALTER TABLE playground ADD last_maint date;
Si vuelve a ver la información de su tabla, verá que se agregó la nueva columna (pero no se ingresaron datos):
- SELECT * FROM playground;
Verás lo siguiente:
Output equip_id | type | color | location | install_date | last_maint ----------+-------+--------+-----------+--------------+------------ 2 | swing | yellow | northwest | 2018-08-16 | (1 row)
Eliminar una columna es igual de sencillo. Si descubre que su equipo de trabajo utiliza una herramienta independiente para realizar un seguimiento del historial de mantenimiento, puede eliminar la columna escribiendo lo siguiente:
- ALTER TABLE playground DROP last_maint;
Esto elimina la last_maint
columna y todos los valores que se encuentran en ella, pero deja todos los demás datos intactos.
Ahora que ha agregado y eliminado columnas, puede intentar actualizar los datos existentes en el paso final.
Paso 10: Actualizar datos en una tabla
Hasta ahora, ha aprendido cómo agregar registros a una tabla y cómo eliminarlos, pero este tutorial aún no ha cubierto cómo modificar las entradas existentes.
Puede actualizar los valores de una entrada existente consultando el registro que desea y configurando la columna con el valor que desea utilizar. Puede consultar el swing
registro (esto coincidirá con cada swing de su tabla) y cambiar su color a red
:
- UPDATE playground SET color = 'red' WHERE type = 'swing';
Puede verificar que la operación fue exitosa consultando los datos nuevamente:
- SELECT * FROM playground;
Verás lo siguiente:
Output equip_id | type | color | location | install_date ----------+-------+-------+-----------+-------------- 2 | swing | red | northwest | 2010-08-16(1 row)
Como puedes ver, tu diapositiva ahora está registrada como red
.
Conclusión
Ya tiene instalado PostgreSQL en su servidor CentOS 8. Sin embargo, todavía queda mucho por aprender sobre Postgres. Aquí encontrará más guías que explican cómo utilizar Postgres:
- Una comparación de los sistemas de gestión de bases de datos relacionales
- Obtenga información sobre cómo ejecutar consultas en PostgreSQL
Deja una respuesta