Cómo Instalar y Usar PostgreSQL en Ubuntu 22.04

Introducción

Los sistemas de gestión de bases de datos relacionales son un componente clave de muchos sitios web y aplicaciones. Proporcionan una forma estructurada de almacenar, organizar y acceder a la información.

PostgreSQL, o Postgres, es un sistema de gestión de bases de datos relacionales que proporciona una implementación del lenguaje de consulta SQL. Es compatible con los estándares y tiene muchas características avanzadas como transacciones confiables y concurrencia sin bloqueos de lectura.

Esta guía muestra cómo instalar Postgres en un servidor Ubuntu 22.04. También proporciona algunas instrucciones para la administración general de la base de datos.

Prerrequisitos

Para seguir este tutorial, necesitarás un servidor Ubuntu 22.04 que haya sido configurado siguiendo nuestra Guía de Configuración Inicial del Servidor para Ubuntu 22.04. Después de completar este tutorial previo, tu servidor debería tener un usuario no root con permisos sudo y un cortafuegos básico.

Paso 1 — Instalación de PostgreSQL

Los repositorios predeterminados de Ubuntu contienen paquetes de Postgres, por lo que puedes instalarlos usando el sistema de empaquetado apt.

Si no lo has hecho recientemente, actualiza el índice de paquetes local del servidor:

  1. sudo apt update

Luego, instala el paquete de Postgres junto con un paquete -contrib que agrega algunas utilidades y funcionalidades adicionales:

  1. sudo apt install postgresql postgresql-contrib

Asegúrate de que el servidor esté en funcionamiento usando el comando systemctl start:

  1. sudo systemctl start postgresql.service

Ahora que el software está instalado y en funcionamiento, podemos revisar cómo funciona y cómo puede ser diferente de otros sistemas de gestión de bases de datos relacionales que hayas utilizado.

Paso 2 — Uso de Roles y Bases de Datos en PostgreSQL

Por defecto, Postgres utiliza un concepto llamado roles para manejar la autenticación y autorización. Estos son, en cierto modo, similares a las cuentas regulares de estilo Unix, pero Postgres no distingue entre usuarios y grupos y en su lugar prefiere el término más flexible “rol”.

Tras la instalación, Postgres está configurado para utilizar autenticación de pares, lo que significa que asocia roles de Postgres con una cuenta del sistema Unix/Linux correspondiente. Si un rol existe 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 llamada postgres que está asociada con el rol predeterminado de Postgres. Para usar Postgres, puedes iniciar sesión en esa cuenta.

Hay algunas formas de usar esta cuenta para acceder a Postgres.

Cambiarse a la cuenta postgres

Cambia a la cuenta postgres en tu servidor escribiendo:

  1. sudo -i -u postgres

Ahora puedes acceder de inmediato al prompt de PostgreSQL escribiendo:

  1. psql

A partir de ahí, eres libre de interactuar con el sistema de gestión de la base de datos según sea necesario.

Salir del prompt de PostgreSQL escribiendo:

  1. \q

Esto te devolverá al prompt de comando del usuario Linux postgres.

Acceder a un prompt de Postgres sin cambiar de cuenta

También puedes ejecutar el comando que desees con la cuenta postgres directamente con sudo.

Por ejemplo, en el último ejemplo, se te indicó que accedieras al prompt de Postgres primero cambiando al usuario postgres y luego ejecutando psql para abrir el prompt de Postgres. Puedes hacer esto en un solo paso ejecutando el comando único psql como el usuario postgres con sudo, así:

  1. sudo -u postgres psql

Esto te iniciará sesión directamente en Postgres sin la intermediación de la bash entre medio.

Nuevamente, puedes salir de la sesión interactiva de Postgres escribiendo:

  1. \q

Muchos casos de uso requieren más de un rol de Postgres. Sigue leyendo para aprender cómo configurar estos.

Paso 3 — Crear un Nuevo Rol

Actualmente, tienes configurado el rol postgres dentro de la base de datos. Puedes crear nuevos roles desde la línea de comandos con el comando createuser. La bandera --interactive te pedirá el nombre del nuevo rol y también preguntará si debe tener permisos de superusuario.

Si has iniciado sesión como la cuenta postgres, puedes crear un nuevo usuario escribiendo:

  1. createuser --interactive

Si, en cambio, prefieres usar sudo para cada comando sin cambiar desde tu cuenta normal, escribe:

  1. sudo -u postgres createuser --interactive

El script te solicitará algunas opciones y, en función de tus respuestas, ejecutará los comandos de Postgres correctos para crear un usuario según tus especificaciones.

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

Puedes obtener más control pasando algunas banderas adicionales. Consulta las opciones echando un vistazo a la página de manual del comando createuser:

  1. man createuser

Tu instalación de Postgres ahora tiene un nuevo usuario, pero aún no has agregado ninguna base de datos. La siguiente sección describe este proceso.

Paso 4 — Crear una Nueva Base de Datos

Otra suposición que hace el sistema de autenticación de Postgres de forma predeterminada es que para cualquier rol utilizado para iniciar sesión, ese rol tendrá una base de datos con el mismo nombre al 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 también llamada “sammy” de forma predeterminada. Puedes crear la base de datos correspondiente con el comando createdb.

Si has iniciado sesión como la cuenta postgres, escribirías algo como:

  1. createdb sammy

Si, en cambio, prefieres usar sudo para cada comando sin cambiar de tu cuenta normal, escribirías:

  1. sudo -u postgres createdb sammy

Esta flexibilidad proporciona múltiples formas de crear bases de datos según sea necesario.

Paso 5 — Abriendo un Prompt de Postgres con el Nuevo Rol

Para iniciar sesión con autenticación de pares, necesitarás un usuario de Linux con el mismo nombre que tu rol y base de datos de Postgres.

Si no tienes disponible un usuario de Linux que coincida, puedes crear uno con el comando adduser. Tendrás que hacer esto desde tu cuenta que no sea de root con privilegios de sudo (es decir, no iniciar sesión como el usuario postgres):

  1. sudo adduser sammy

Una vez que esté disponible esta nueva cuenta, puedes cambiar y conectarte a la base de datos escribiendo:

  1. sudo -i -u sammy
  2. psql

O, puedes hacer esto en línea:

  1. sudo -u sammy psql

Este comando te iniciará sesión automáticamente, asumiendo que todos los componentes se han configurado correctamente.

Si deseas que tu usuario se conecte a una base de datos diferente, puedes hacerlo especificando la base de datos de esta manera:

  1. psql -d postgres

Una vez iniciada la sesión, puedes verificar tu información de conexión actual escribiendo:

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

Esto es útil si te estás conectando a bases de datos que no son las predeterminadas o con usuarios que no son los predeterminados.

Paso 6 — Creando y Eliminando Tablas

Ahora que sabes cómo conectarte al sistema de base de datos PostgreSQL, puedes aprender algunas tareas básicas de gestión de Postgres.

La sintaxis básica para crear tablas 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)
);

Este comando da un nombre a la tabla, y luego define las columnas así como el tipo de columna y la longitud máxima de los datos del campo. Opcionalmente, puedes añadir restricciones para cada columna.

Puedes aprender más sobre la creación de tablas siguiendo nuestra guía sobre Cómo crear y gestionar tablas en SQL.

Para fines de demostración, crea la siguiente tabla:

  1. CREATE TABLE playground (
  2. equip_id serial PRIMARY KEY,
  3. type varchar (50) NOT NULL,
  4. color varchar (25) NOT NULL,
  5. location varchar(25) check (location in ('north', 'south', 'west', 'east', 'northeast', 'southeast', 'southwest', 'northwest')),
  6. install_date date
  7. );

Este comando creará una tabla que inventaría equipos de parque infantil. La primera columna en la tabla contendrá números de identificación de equipos del tipo serial, que es un entero que se incrementa automáticamente. Esta columna también tiene la restricción de PRIMARY KEY, lo que significa que los valores dentro de ella deben ser únicos y no nulos.

Las siguientes dos líneas crean columnas para el tipo y el color del equipo respectivamente, ninguno de los cuales puede ser nulo. La línea después de estas crea una columna ubicación con una restricción que requiere que el valor sea uno de ocho valores posibles. La última línea crea una columna fecha que registra la fecha en que instalaste el equipo.

Para dos de las columnas (equip_id y install_date), el comando no especifica una longitud de campo. La razón de esto es que algunos tipos de datos no requieren una longitud establecida porque la longitud o el formato se da por implícito.

Examina tu nueva tabla escribiendo:

  1. \d
Output
List of relations Schema | Name | Type | Owner --------+-------------------------+----------+------- public | playground | table | sammy public | playground_equip_id_seq | sequence | sammy (2 rows)

Tu mesa de juegos está aquí, pero también hay algo llamado playground_equip_id_seq que es del tipo sequence. Esto es una representación del tipo serial que diste a tu columna equip_id. Esto lleva un seguimiento del próximo número en la secuencia y se crea automáticamente para columnas de este tipo.

Si deseas ver solo la tabla sin la secuencia, puedes escribir:

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

Con una tabla lista, vamos a usarla para practicar el manejo de datos.

Paso 7 — Agregar, Consultar y Eliminar Datos en una Tabla

Ahora que tienes una tabla, puedes insertar algunos datos en ella. Como ejemplo, agrega un tobogán y un columpio llamando a la tabla en la que deseas agregar, nombrando las columnas y luego proporcionando datos para cada columna, así:

  1. INSERT INTO playground (type, color, location, install_date) VALUES ('slide', 'blue', 'south', '2017-04-28');
  2. INSERT INTO playground (type, color, location, install_date) VALUES ('swing', 'yellow', 'northwest', '2018-08-16');

Debes tener cuidado al ingresar los datos para evitar algunos problemas comunes. Por un lado, no envuelvas los nombres de las columnas entre comillas, pero los valores de columna que ingreses sí necesitan comillas.

Otra cosa a tener en cuenta es que no debes ingresar un valor para la columna equip_id. Esto se debe a que se genera automáticamente cada vez que agregas una nueva fila a la tabla.

Recupera la información que has agregado escribiendo:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 1 | slide | blue | south | 2017-04-28 2 | swing | yellow | northwest | 2018-08-16 (2 rows)

Observa que tu equip_id se ha llenado correctamente y que todos tus otros datos se han organizado correctamente.

Si se rompe el tobogán en el patio de recreo y tienes que quitarlo, también puedes quitar la fila de tu tabla escribiendo:

  1. DELETE FROM playground WHERE type = 'slide';

Consulta la tabla nuevamente:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+--------+-----------+-------------- 2 | swing | yellow | northwest | 2018-08-16 (1 row)

Nota que la fila tobogán ya no forma parte de la tabla.

Paso 8 — Agregar y Eliminar Columnas de una Tabla

Después de crear una tabla, puedes modificarla agregando o eliminando columnas. Agrega una columna para mostrar la última visita de mantenimiento para cada equipo escribiendo:

  1. ALTER TABLE playground ADD last_maint date;

Visualiza nuevamente la información de tu tabla. Se ha agregado una nueva columna pero no se han ingresado datos:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date | last_maint ----------+-------+--------+-----------+--------------+------------ 2 | swing | yellow | northwest | 2018-08-16 | (1 row)

Si descubres que tu equipo de trabajo usa una herramienta separada para llevar el registro del historial de mantenimiento, puedes eliminar la columna escribiendo:

  1. ALTER TABLE playground DROP last_maint;

Esto elimina la columna last_maint y cualquier valor que se encuentre dentro de ella, pero deja intactos todos los demás datos.

Paso 9 — Actualización de Datos en una Tabla

Hasta ahora, has aprendido cómo agregar registros a una tabla y cómo eliminarlos, pero este tutorial aún no ha cubierto cómo modificar entradas existentes.

Puedes actualizar los valores de una entrada existente consultando el registro que deseas y estableciendo la columna con el valor que deseas utilizar. Puedes consultar el registro de swing (esto coincidirá con todos los columpios en tu tabla) y cambiar su color a rojo. Esto podría ser útil si le diste una capa de pintura al conjunto de columpios:

  1. UPDATE playground SET color = 'red' WHERE type = 'swing';

Puedes verificar que la operación fue exitosa consultando los datos nuevamente:

  1. SELECT * FROM playground;
Output
equip_id | type | color | location | install_date ----------+-------+-------+-----------+-------------- 2 | swing | red | northwest | 2018-08-16 (1 row)

El tobogán ahora está registrado como rojo.

Conclusión

Ahora estás configurado con PostgreSQL en tu servidor Ubuntu 22.04. Si deseas aprender más sobre Postgres y cómo usarlo, te recomendamos que consultes las siguientes guías:

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-22-04