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.
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.
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
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
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.
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:
OutputCreated 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.
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.
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
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.
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:
OutputEnter 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.
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.
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:
OutputYou 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.
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.
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.
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.
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
.
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:
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!