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, o Postgres, es un sistema de administración de bases de datos relacionales que proporciona una implementación del lenguaje de consulta SQL. Es una opción popular para muchos proyectos pequeños y grandes, y tiene la ventaja de cumplir con los estándares y ofrecer muchas características avanzadas, como transacciones confiables y simultaneidad sin bloqueos de lectura.
En esta guía se muestra la forma de instalar Postgres en una instancia de VPS de Ubuntu 18.04 y también se proporcionan instrucciones para la administración básica de bases de datos.
Para completar este turorial, necesitará un servidor de Ubuntu 18.04 configurado conforme a nuestra guía de configuración inicial para servidores de Ubuntu 18.04. Una vez completado este tutorial de requisitos previos, su servidor debería contar con un usuario con permisos sudo no root y un firewall básico.
Los repositorios predeterminados de Ubuntu contienen paquetes de Postgres, para que pueda instalarlos utilizando el sistema de empaquetado apt
.
Dado que es la primera vez que utiliza apt
en esta sesión, actualice su índice local de paquetes. Luego, instale el paquete de Postgres junto con un paquete -contrib
, que agrega algunas utilidades y funcionalidades adicionales:
- sudo apt update
- sudo apt install postgresql postgresql-contrib
Ahora que el software está instalado, podemos revisar su funcionamiento y la forma en que puede diferenciarse de otros sistemas de administración de bases de datos similares que pueda haber utilizado.
Por defecto, Postgress utiliza un concepto llamado “roles” para gestionar la autenticación y la autorización. 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 Postgres, puede iniciar sesión en esa cuenta.
Existen algunas maneras de usar esta cuenta para acceder a 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 postgres
.
También puede ejecutar el comando que desee con la cuenta de postgres de forma directa a través de sudo
.
Por ejemplo, en el último caso 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. 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 entre ellos.
De nuevo, puede salir de la sesión interactiva de Postgres escribiendo lo siguiente:
- \q
Para muchos casos de uso se requiere más de un rol de postgres. Continúe leyendo para saber como configurar estos 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
El script le mostrará algunas opciones y, según sus respuestas, ejecutará los comandos correctos de Postgres para crear un usuario conforme a sus especificaciones.
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 de man
:
- man createuser
Ahora su instalación de Postgres tiene un usuario 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 la base de datos apropiada 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.
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 lo siguiente:
- sudo -i -u sammy
- psql
También podrá hacerlo de forma directa:
- sudo -u sammy psql
Este comando le permitirá iniciar sesión de forma automática, suponiendo que todos los componentes se hayan configurado de forma correcta.
Si desea que su usuario se conecte a una base de datos diferente, puede lograrlo especificando la base de datos de esta manera:
- psql -d postgres
Ya que inició sesión, puede verificar la información de su conexión actual escribiendo lo siguiente:
- \conninfo
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.
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, puede ser 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)
);
Como puede observar, estos comandos otorgan un nombre a la tabla y luego 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.
Podrá obtener más información sobre cómo crear y administrar tablas en Postgres aquí.
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
);
Con estos comandos se creará una tabla que hará un inventario de los equipos para áreas recreativas. Esto comienza con un ID de 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
), los comandos no especifican 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.
Con los dos comandos próximos se crean columnas para type
y color
del equipo respectivamente. Estas no pueden estar vacías. Después de esto, el comando crea una columna location
y una restricción según la cual el valor debe ser uno de los ocho posibles. Con el último comando, se 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
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
Output List of relations
Schema | Name | Type | Owner
--------+------------+-------+-------
public | playground | table | sammy
(1 row)
Ahora que dispone de una tabla, puede insertar datos en ella.
A modo de ejemplo, agregue un tobogán y un columpio llamando a 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 se debe a que se genera de forma automática cuando se crea una nueva fila en la tabla.
Recupere la información que agregó escribiendo lo siguiente:
- 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)
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;
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.
Después de crear una tabla, puede modificarla para agregar o eliminar las columnas con relativa facilidad. 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;
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.
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”. Esto podría resultar útil si pintara el columpio:
- UPDATE playground SET color = 'red' WHERE type = 'swing';
Puede verificar la eficacia de la operación consultando los datos de nuevo:
- SELECT * FROM playground;
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.
De esta manera, habrá configurado PostgreSQL en su servidor de Ubuntu 18.04. 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!
** ojo ** dicen de asegurar el bbdd con una contraseña para el rol postgres, con cifrado m5 https://ubuntu.com/server/docs/databases-postgresql (en inglés)
Muchas gracias por el artículo, me queda una dudad. ¿Cómo creo la contraseña de los usuarios?