Tutorial

Cómo instalar y usar PostgreSQL en CentOS 8

PostgreSQLDatabasesCentOS 8

Introducción

Los sistemas de administración de bases de datos relacionales son un componente clave de una gran cantidad de aplicaciones y sitios web. Proporcionan una alternativa estructurada para almacenar la información, organizarla y acceder a ella.

PostgreSQL, también conocido como Postgres, es un sistema de administración de bases de datos relacionales que proporciona una implementación del Structured Query Language, más conocido como SQL. Se utiliza en muchos proyectos populares, grandes y pequeños, cumple con los estándares y tiene muchas funciones avanzadas, como transacciones fiables y concurrencias sin bloqueos de lectura.

Siguiendo esta guía, instalará la última versión de PostgreSQL en un servidor CentOS 8.

Requisitos previos

Para completar este tutorial, necesitará un servidor con CentOS 8. Este servidor debería tener un usuario no root con privilegios administrativos y un firewall configurado con firewalld. Para configurarlo, consulte nuestra Guía de configuración inicial de servidores para CentOS 8.

Paso 1: Instalar PostgreSQL

PostgreSQL está disponible en el repositorio predeterminado de software AppStream de CentOS 8 y hay varias versiones que puede instalar. Puede elegir entre estas versiones habilitando la colección adecuada de paquetes y dependencias que se ajusten a la versión que desee instalar, y cada colección se denomina module stream.

En DNF, el administrador de paquetes predeterminado de CentOS 8, los módulos son colecciones especiales de paquetes RPM que juntas forman una aplicación más grande. Esto está diseñado para hacer que la instalación de paquetes y sus dependencias sea más intuitiva para los usuarios.

Enumere los flujos disponibles del módulo postgresql usando el comando dnf:

  • dnf module list postgresql
Output
postgresql 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

Puede ver en este resultado que hay tres versiones de PostgreSQL disponibles desde el repositorio AppStream: 9.6, 10 y 12. El flujo que proporciona la versión 10 de Postgres es el predeterminado, como se indica mediante la [d] que la sigue. Si desea instalar esa versión, podría ejecutar sudo dnf install postgresql-server y proceder con el siguiente paso. Sin embargo, aunque la versión 10 todavía se mantiene, este tutorial instalará la versión 12, la última versión en el momento en que se redactó este artículo.

Para instalar la versión 12 de PostgreSQL, debe habilitar el flujo de módulo de esa versión. Cuando habilite un flujo de módulos, anule el flujo predeterminado y haga que todos los paquetes relacionados con el flujo habilitado estén disponibles en el sistema. Observe que solo puede habilitarse un flujo de cualquier módulo concreto que pueda habilitarse en un sistema al mismo tiempo.

Para habilitar el flujo de módulo para Postgres versión 12, ejecute el siguiente comando:

  • sudo dnf module enable postgresql:12

Cuando se le solicite, pulse y y luego INTRO para confirmar que desea habilitar el flujo:

Output
==================================================================== Package Architecture Version Repository Size ==================================================================== Enabling module streams: postgresql 12 Transaction Summary ==================================================================== Is this ok [y/N]: y

Tras habilitar el flujo de módulo de la versión 12, puede instalar el paquete postgresql-server para instalar PostgresSQL 12 y todas sus dependencias:

  • sudo dnf install postgresql-server

Cuando se le indique, confirme la instalación pulsando y y luego INTRO:

Output
. . . Install 4 Packages Total download size: 16 M Installed size: 62 M Is 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: Crear un nuevo clúster de base de datos para PostgreSQL

Debe crear un nuevo clúster de base de datos para PostgreSQL database cluster antes de 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 instanacia de servidor. Crear un clúster de base de datos consiste en crear los directorios en los cuales se dispondrán los datos de la base de datos, generar las tablas de catálogo compartido y crear las bases de datos template1 y postgres.

La base de datos template1 es una plantilla usada para crear nuevas bases de datos; todo lo que se almacene en template1, incluso los objetos que añada, se colocarán en las nuevas bases de datos cuando se creen. La base de datos postgres es una base de datos predeterminada diseñada para que la empleen usuarios, utilidades y aplicaciones externas.

El paquete Postgres que instalamos en el paso anterior cuenta con una secuencia de comandos llamada postgresql-setup que ayuda con la administración de clúster de base de datos de nivel bajo. Para crear un clúster de la base de datos, ejecute la secuencia de comandos usando sudo y con la opción --initdb:

  • sudo postgresql-setup --initdb

Verá lo siguiente:

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

A continuación, utilice systemctl una vez más para permitir que el servicio se inicie cada vez que se inicie el servidor:

  • sudo systemctl enable postgresql

Esto generará el siguiente resultado:

Output
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.

Ahora que PostgreSQL está activo y en ejecución, continuaremos usando roles para aprender cómo funciona Postgres y cómo es diferente de los sistemas de gestión de base de datos similares que pueda haber usados en el pasado.

Paso 3: Usar roles y bases de datos de PostgreSQL

PostgreSQL utiliza un concepto llamado roles para gestionar la autenticación y la autorización de los clientes. Estos son, en algunos aspectos, parecidos a las cuentas normales de estilo Unix, pero Postgres no distingue entre los usuarios y los grupos, y en su lugar prefiere el término más flexible de “rol”.

Tras la instalación, Postgres se configura para usar la autenticación ident. Esto significa que asocia los roles de Postgres con una cuenta de sistema Unix o Linux correspondiente. Si existe un rol dentro de Postgres, un nombre de usuario de Unix o Linux con el mismo nombre puede iniciar sesión ocupando ese rol.

El procedimiento de instalación creó una cuenta de usuario llamada postgres, que se asocia con el rol predeterminado de Postgres. Para usar PostgresSQL, puede iniciar sesión en esa cuenta.

Existen varias formas de usar esta cuenta para acceder a la solicitud de PostgresSQL.

Cambiar a la cuenta de postgres

Cambie a la cuenta de postgres en su servidor escribiendo lo siguiente:

  • sudo -i -u postgres

Ahora podrá acceder de inmediato a una linea de comandos de Postgres escribiendo lo siguiente:

  • psql

Esto le permitirá acceder a la línea de comandos de PostgreSQL y desde esta podrá interactuar de inmediato con el sistema de administración de bases de datos.

Salga de la línea de comandos de PostgreSQL escribiendo lo siguiente:

  • \q

Con esto regresará a la línea de comandos de Linux de la cuenta postgres. Ahora, vuelva a su cuenta original con lo siguiente:

  • exit

Acceder a una línea de comandos de Postgres sin cambiar de cuenta

También puede ejecutar comandos con la cuenta postgres directamente usando sudo.

Por ejemplo, en el ejemplo anterior se le indicó acceder a la línea de comandos de Postgres pasando primero al usuario de postgres y luego ejecutando psql para abrir la línea de comandos de Postgres. Como alternativa, puede realizarlo en un solo paso ejecutando el comando único psql como usuario de postgres con sudo, como se muestra:

  • sudo -u postgres psql

Esto le permitirá iniciar sesión de forma directa en Postgres sin el shell bash intermediario.

De nuevo, puede salir de la sesión interactiva de Postgres escribiendo lo siguiente:

  • \q

En este paso, ha usado la cuenta postgres para llegar a la línea de comandos psql. Pero muchos casos de uso se requiere más de un rol de Postgres. Continúe leyendo para saber como configurar nuevos roles.

Paso 4: Crear un nuevo rol

En este momento, solo tiene el rol de postgres configurado dentro de la base de datos. Puede crear nuevos roles desde la línea de comandos con el comando createrole. El indicador --interactive le solicitará el nombre del nuevo rol y también le preguntará si debería tener permisos de superusuario.

Si inició sesión a través de la cuenta de postgres, puede crear un nuevo usuario escribiendo lo siguiente:

  • createuser --interactive

Si, como alternativa, prefiere usar sudo para cada comando sin dejar de usar su cuenta normal, escriba lo siguiente:

  • sudo -u postgres createuser --interactive

La secuencia de comandos le mostrará algunas opciones y, según sus respuestas, ejecutará los comandos necesarios de Postgres para crear un usuario conforme a sus especificaciones. Para este tutorial, cree un rol llamado sammy y concédale privilegios de súper usuario introduciendo y cuando se le indique:

Output
Enter name of role to add: sammy Shall the new role be a superuser? (y/n) y

Puede obtener un mayor control pasando algunos indicadores adicionales. Consulte las opciones visitando la página man para createuser:

  • man createuser

Ahora su instalación de Postgres tiene un rol nuevo, pero aún no agregó bases de datos. En la sección siguiente se describe este proceso.

Paso 5: Crear una nueva base de datos

Otra suposición que el sistema de autenticación de Postgres realiza por defecto es que para cualquier rol utilizado en el inicio de sesión habrá una base de datos con el mismo nombre al que este podrá acceder.

Esto significa que, si el usuario que creó en la última sección se llama sammy, ese rol intentará conectarse con una base de datos que por defecto también se llama “sammy”. Puede crear dicha base de datos con el comando createdb.

Si inició sesión a través de la cuenta de postgres, escribiría algo similar a lo siguiente:

  • createdb sammy

Si, como alternativa, prefiere utilizar sudo para cada comando sin dejar de emplear su cuenta normal, escribiría lo siguiente:

  • sudo -u postgres createdb sammy

Esta flexibilidad ofrece varias vías para crear bases de datos cuando sea necesario.

Ahora que creó una nueva base de datos, iniciará sesión en ella con su nuevo rol.

Paso 6: Abrir una línea de comandos de Postgres con el nuevo rol

Para iniciar sesión con la autenticación basada en ident, necesitará un usuario de Linux con el mismo nombre de su rol y su base de datos de Postgres.

Si no tiene un usuario disponible de Linux que coincida, puede crear uno con el comando adduser. Deberá hacerlo desde su cuenta no root con privilegios sudo (es decir, sin iniciar sesión como usuario de postgres):

  • sudo adduser sammy

Una vez que esté disponible esta cuenta nueva, podrá cambiar y conectarse a la base de datos escribiendo primero lo siguiente:

  • sudo -i -u sammy
  • psql

También podrá hacerlo de forma directa:

  • sudo -u sammy psql

Este comando hará que inicie sesión automáticamente.

Si desea que su usuario se conecte a una base de datos diferente, puede hacerlo incluyendo el indicador -d y especificando la base de datos, de esta forma:

  • psql -d postgres

Una vez iniciada sesión, puede verificar la información de su conexión actual escribiendo lo siguiente:

  • \conninfo

Esto mostrará el siguiente resultado:

Output
You are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".

Esto resultará útil si se conecta a bases de datos no predeterminadas o con usuarios no predeterminados.

Al haber conectado con su base de datos, ahora puede intentar crear y eliminar tablas.

Paso 7: Crear y eliminar tablas

Ahora que sabe cómo conectarse al sistema de bases de datos de PostgreSQL, puede aprender algunas tareas básicas de administración de Postgres.

Primero, cree una tabla para almacenar datos. A modo de ejemplo, creará una tabla en la que se describan algunos equipos para áreas recreativas.

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)
);

Con estos comandos se asigna un nombre a la tabla y luego se definen las columnas, el tipo de columna y la extensión máxima de los datos de campo. De manera opcional, también puede añadir restricciones de tabla para cada columna.

Para fines demostrativos, cree una tabla sencilla como la siguiente:

  • 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 realiza un inventario de equipos para áreas recreativas. Comienza con el ID de un equipo, que es del tipo serial. Este tipo de dato es un número entero que se incrementa de forma automática. También asignó a esta columna la restricción de PRIMARY KEY , lo cual significa que los valores deben ser únicos y no nulos.

Para dos de las columnas (equip_id e install_date), el comando no especifica una extensión de campo. Esto se debe a que algunos tipos de columna no requieren una extensión específica porque la extensión está implícita en el tipo.

Las siguientes dos líneas crean columnas para type y color del equipo respectivamente. Estas no pueden estar vacías. La línea tras estas crea una columna location y una restricción según la cual el valor debe ser uno de los ocho posibles. La última línea crea una columna de fecha en la cual se registra la fecha en la que usted instaló el equipo.

Puede ver su tabla nueva escribiendo lo siguiente:

  • \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)

Su tabla de áreas de recreación se encuentra aquí, pero también existe algo llamado playground_equip_id_seq que responde al tipo sequence. Esto es una representación del tipo serial que usted atribuyó a su columna de equip_id. Esto realiza un seguimiento del número que sigue en la secuencia y se genera de forma automática para columnas de este tipo.

Si desea ver solo la tabla sin la secuencia, puede escribir lo siguiente:

  • \dt

Obtendrá el siguiente resultado:

Output
List of relations Schema | Name | Type | Owner --------+------------+-------+------- public | playground | table | sammy (1 row)

En este paso, creó una tabla de ejemplo. En el siguiente paso, intentará añadir, consultar y eliminar entradas en esa tabla.

Paso 8: Agregar, consultar y eliminar datos en una tabla

Ahora que dispone de una tabla, puede insertar datos en ella.

A modo de ejemplo, agregue un tobogán y un columpio invocando la tabla en la que desea realizar la adición, nombre las columnas y luego proporcione datos para cada una de ellas, como se muestra:

  • 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. Para empezar, no escriba los nombres de las columnas entre comillas. Estás sí se necesitarán para los valores de la columna que ingresó.

Otro aspecto que debe tener en cuenta es no ingresar un valor para la columna equip_id. Esto es porque se genera automáticamente siempre que se cree una nueva fila en la tabla.

Recupere la información que agregó escribiendo lo siguiente:

  • SELECT * FROM playground;

Verá lo siguiente:

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í, puede ver que su equip_id se completó con éxito y que todos sus otros datos se organizaron de forma correcta.

Si el tobogán del área de recreación se daña y tiene que eliminarlo, también puede eliminar la fila de su tabla escribiendo lo siguiente:

  • DELETE FROM playground WHERE type = 'slide';

Consulte la tabla de nuevo:

  • SELECT * FROM playground;

Verá lo siguiente:

Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2018-08-16 (1 row)

Observará que su tobogán ya no se encuentra en la tabla.

Ahora que ha añadido y eliminado entradas en su tabla, puede intentar añadir y eliminar columnas.

Paso 9: Añadir y eliminar columnas de una tabla

Tras crear una tabla, puede modificarla para añadir o eliminar columnas. Agregue una columna para mostrar la última visita de mantenimiento por cada equipo escribiendo lo siguiente:

  • ALTER TABLE playground ADD last_maint date;

Si vuelve a visualizar la información de su tabla, observará que se agregó la nueva columna (pero no se ingresaron datos):

  • SELECT * FROM playground;

Verá 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 determina que su equipo de trabajo utiliza una herramienta separada para dar seguimiento al historial de mantenimiento, puede eliminar la columna escribiendo lo siguiente:

  • ALTER TABLE playground DROP last_maint;

Con esto, se eliminan la columna last_maint y los valores que se encuentren en ella, pero deja intactos todos los demás datos.

Tras añadir y eliminar columnas, puede intentar actualizar los datos existentes en el paso final.

Paso 10: Actualizar datos de una tabla

Hasta ahora, a través de este tutorial aprendió a agregar registros a una tabla y a eliminarlos de ella, pero aún no se abordó la forma de modificar los registros existentes.

Puede actualizar los valores de una entrada existente buscando el registro que desee y fijando el valor que prefiera utilizar para la columna. Puede consultar el registro “columpio” (coincidirá con cada columpio de su tabla) y cambiar el color a “rojo”.

  • UPDATE playground SET color = 'red' WHERE type = 'swing';

Puede verificar la eficacia de la operación consultando los datos de nuevo:

  • SELECT * FROM playground;

Verá lo siguiente:

Output
equip_id | type | color | location | install_date ----------+-------+-------+-----------+-------------- 2 | swing | red | northwest | 2010-08-16 (1 row)

Como puede ver, ahora el color registrado de su tobogán será el rojo.

Conclusión

Ahora está listo con PostgresSQL en su servidor CentOS 8. Sin embargo, aún queda mucho más por aprender con Postgres. A continuación, se ofrecen algunas guías más en las que se abarca el uso de Postgres:

Creative Commons License