¿Qué es un Esquema en PostgreSQL?

Actualizado el 31 julio, 2024 17:07:41

En el mundo de las bases de datos, la organización y estructuración de la información es fundamental para su eficiente gestión.

PostgreSQL, un sistema de gestión de bases de datos relacional de código abierto, ofrece una poderosa característica llamada «esquemas» (schema) que permite una organización estructurada y flexible de los objetos de la base de datos.

Cuando trabajamos con PostgreSQL, es común encontrarnos con situaciones donde necesitamos manejar múltiples conjuntos de objetos relacionados o separar lógicamente los objetos utilizados por diferentes aplicaciones o grupos de usuarios.

Aquí es donde entran en juego los esquemas.

En este artículo, exploraremos qué son los esquemas en PostgreSQL y cómo pueden ayudarnos a organizar, controlar los permisos y gestionar de manera más eficiente nuestra base de datos.

Si estás interesado en aprender cómo utilizar los esquemas en PostgreSQL para optimizar la organización de tus bases de datos y mejorar la gestión de tus proyectos, ¡sigue leyendo!

INDICE

¿Qué es un Esquema en PostgreSQL?

En PostgreSQL, un esquema es una forma de organizar y agrupar los objetos de base de datos, como tablas, vistas, funciones y otros, en una estructura lógica.

Puede verse como un contenedor que permite organizar y gestionar de manera más eficiente los objetos relacionados en una base de datos.

Un esquema proporciona un espacio de nombres separado dentro de la base de datos, lo que evita conflictos de nombres entre los objetos.

Esto permite tener objetos con el mismo nombre en diferentes esquemas sin generar conflictos.

Por ejemplo, puede haber una tabla llamada «clientes» en el esquema «ventas» y otra tabla con el mismo nombre «clientes» en el esquema «facturación».

Además de su función de organización, los esquemas también ayudan a controlar los permisos y la seguridad de los objetos de la base de datos.

Los permisos pueden asignarse a nivel de esquema, lo que permite controlar quién puede acceder, modificar o eliminar objetos en un esquema específico.

Los esquemas son especialmente útiles en entornos donde se manejan múltiples aplicaciones o diferentes grupos de usuarios que comparten la misma base de datos.

Al utilizar esquemas, se puede mantener una separación lógica y una mayor claridad en la estructura de la base de datos.

El propósito de un Esquema (schema)

Antes de aprender cómo utilizar los esquemas, es necesario comprender cuál es el propósito de un esquema en primer lugar.

Para entenderlo, echemos un vistazo a cómo está estructurado PostgreSQL:

  • Instance (instancia)
    • Database (base de datos)
      • Schema (esquema)
        • Table (tabla)
          • Row (filas)

Una «instancia» es básicamente lo que se inicia al implementar PostgreSQL.

La siguiente capa es una base de datos.

En realidad, es a esto a lo que te conectas ya que en PostgreSQL, una conexión siempre está asociada a una base de datos dentro de una instancia, lo cual ocurre primero, justo después de la autenticación del usuario.

Lo que es importante es la capa entre las bases de datos y las tablas: los esquemas.

Los Esquemas agrupan tablas

Los esquemas en PostgreSQL son una herramienta poderosa que nos permite organizar nuestras tablas de forma más eficiente.

Imagina que tienes una base de datos con una gran cantidad de tablas, y colocarlas todas juntas en un solo lugar puede volverse abrumador y difícil de gestionar.

Es como tener cientos de imágenes y querer almacenarlas todas en una misma carpeta.

En lugar de eso, es mucho más práctico y ordenado agrupar las imágenes por categorías, como año, ubicación, etc.

De manera similar, los esquemas nos permiten agrupar nuestras tablas en conjuntos lógicos y separados.

Podemos crear esquemas que representen diferentes categorías, proyectos o áreas funcionales dentro de nuestra base de datos.

Esto nos brinda una forma organizada y estructurada de gestionar nuestras tablas, evitando la confusión y facilitando la comprensión de la base de datos en su conjunto.

Esquemas en PostgreSQL

Ahora podemos centrarnos en cómo se puede aplicar este concepto a PostgreSQL. Lo primero que tenemos que examinar es el esquema public.

Utilizando el Esquema "public"

En PostgreSQL, no es necesario tener un conocimiento profundo sobre esquemas para aprovechar sus beneficios.

Esto se debe a que PostgreSQL incluye automáticamente un esquema llamado «public» por defecto.

Ahora bien, ¿cómo podemos identificar qué esquemas existen en una base de datos PostgreSQL?

Para ello, podemos utilizar el comando \dn en la herramienta psql, que nos permite mostrar esta información de manera sencilla.

Si no se indica lo contrario, es decir por defecto, una tabla terminará en el esquema public.

Creemos por ejemplo una tabla a la que llamaremos ‘productos’:

Esta tabla al no haber sido indicado un esquema, se ingresó en el public.

Ejecutamos el comando \d para verificar la situación.

En el ejemplo anterior, tanto la tabla como la secuencia a ella asociada, se encuentran en el esquema predeterminado (public), tal como se esperaba.

Como se puede apreciar, no es necesario tener ningún conocimiento sobre esquemas para seguir adelante.

Consultar las tablas dentro un Esquema

Existen dos formas de consultar o invocar una tabla.

La primera forma es:

				
					SELECT * FROM productos;
				
			

No obstante, también tienes la opción de utilizar explícitamente el nombre del esquema como prefijo del nombre de la tabla, lo que se conoce como un nombre completamente calificado.

Algunos ORM utilizan esta práctica para mitigar el riesgo de acceder a la tabla incorrecta debido a una configuración errónea.

Más adelante en este artículo, exploraremos este enfoque en mayor detalle.

La segunda forma es:

				
					SELECT * FROM public.productos;
				
			

Ahora que hemos entendido cómo funciona el esquema public, podemos proseguir y crear nuestro primer esquema nuevo.

Creación de un Esquema en PostgreSQL

¿Cómo podemos crear un esquema en PostgreSQL?

Crear un esquema en PostgreSQL es un proceso sencillo.

Puedes utilizar el comando CREATE SCHEMA seguido del nombre del esquema que deseas crear.

Aquí tienes un ejemplo:

CREATE SCHEMA nombre_del_esquema;

Puedes elegir cualquier nombre significativo para el esquema que estés creando.

Una vez ejecutado el comando, el nuevo esquema se agregará a tu base de datos PostgreSQL y podrás comenzar a utilizarlo para organizar tus tablas y otros objetos de base de datos.

				
					CREATE SCHEMA sucursal01;
				
			

Una vez que se ha creado el esquema, podemos crear una tabla dentro del esquema:

				
					CREATE TABLE sucursal01.productos
(
       codigo text PRIMARY KEY, 
       descripcion text,
       fecha_creacion date, 
       stock    int 
);
				
			

En la siguiente captura de pantalla se encuentran las diferentes opciones que se pueden utilizar con el comando CREATE SCHEMA.

Al utilizar el nombre del esquema como prefijo del nombre de la tabla, puedes especificar el esquema que deseas utilizar.

Es importante tener en cuenta que el esquema en sí no afecta la forma en que se almacenan los datos.

Los archivos de datos asociados a nuestras tablas siguen ubicándose en el mismo directorio de datos de PostgreSQL.

Por lo tanto, los esquemas no influyen en el rendimiento y no se trata de una optimización de almacenamiento.

El propósito de un esquema es simplemente agrupar elementos y ayudar a organizar una política de seguridad sólida mediante la asignación de permisos a los esquemas.

				
					\d sucursal01.productos;
				
			
Interacción entre Esquemas

Hay dos aspectos que vale la pena mencionar aquí.

En primer lugar, es posible tener dos tablas con el mismo nombre en dos esquemas diferentes.

Por ejemplo tal como hemos hecho, pueden existir una tabla llamada «public.productos» y otra tabla llamada «sucursal01.productos».

Esto es perfectamente posible y, de hecho, bastante común.

En segundo lugar, no es necesario agregar un prefijo a la tabla en el esquema «public».

Esto se debe a un parámetro de PostgreSQL llamado:

				
					SHOW search_path;
				
			

Todo lo que se encuentre en la variable «search_path» se puede acceder directamente sin necesidad de proporcionar explícitamente el nombre del esquema.

Podemos comprobar esto de manera sencilla:

				
					SET search_path TO sucursal01;
				
			

Es importante tener en cuenta que el cambio en el parámetro se aplica únicamente a la sesión actual y no afecta al sistema de producción.

A partir de ahora, se mostrará la segunda tabla llamada «productos» porque PostgreSQL sabe en qué esquema buscar.

				
					\d productos;
				
			

Ahora que se ha cambiado el search_path, tenemos que agregar el prefijo del esquema público cuando queremos consultar alguna tabla que se encuentre dentro, ya que ya no está en la ruta de búsqueda:

				
					\d public.productos;
				
			

Tras esta introducción básica a los esquemas, exploraremos cómo se utilizan en conjunto con las vistas.

Vistas y Esquemas

Una vista es una representación virtual de los datos almacenados en una o más tablas.

Funciona como una tabla virtual que contiene una consulta predefinida que se puede utilizar para acceder y manipular los datos de manera conveniente.

Las vistas permiten simplificar las consultas complejas y brindan una capa adicional de abstracción para ocultar los detalles de la estructura de la base de datos subyacente.

En pocas palabras, una vista proporciona una forma personalizada y simplificada de acceder y trabajar con los datos almacenados en las tablas de la base de datos.

Un aspecto relevante es que los esquemas generalmente no constituyen una limitación.

Una consulta tiene la capacidad de combinar tablas de diferentes esquemas sin restricciones, y la vista asociada a esa consulta puede exponer los datos en el esquema que elijas (siempre y cuando se cuente con los permisos correspondientes).

				
					SET search_path TO default;
CREATE VIEW public.vista01 AS
SELECT * FROM sucursal01.productos ;
				
			

Renombrar Esquemas en PostgreSQL

En PostgreSQL, todo lo que se puede crear también se puede renombrar. Lo mismo ocurre con los esquemas:

Cambiar el nombre de un esquema tiene repercusiones. Presta atención a lo que sucedió con la vista que creamos en la sección anterior:

				
					ALTER SCHEMA sucursal01 RENAME TO principal;
\d+ vista01
				
			

La vista no hace referencia directamente a las tablas, sino a identificadores internos de objetos, lo cual resulta crucial, ya que cambiar el nombre del esquema simplemente implica asignar una etiqueta de texto diferente a un ID interno.

La definición real de la vista no depende de los nombres, por lo tanto, modificar los nombres de los objetos no invalida una vista.

En cambio, en bases de datos como Oracle, cambiar el nombre de objetos puede dejar una vista en un estado inválido.

Eliminar Esquema en PostgreSQL

Eliminar esquemas en PostgreSQL sigue la misma lógica que los otros comandos:

Relaciones de Dependencia de Esquemas

Es importante evitar dejar objetos huérfanos, por lo tanto, no se puede eliminar un esquema de forma indiscriminada sin causar daños colaterales.

PostgreSQL nos proporcionará información precisa sobre las acciones que se llevarían a cabo, pero en realidad no eliminará el esquema  para evitar romper las dependencias en el esquema.

				
					DROP SCHEMA principal;
				
			

Si realmente deseamos eliminar el esquema y enfrentar todas las consecuencias asociadas, podemos utilizar la opción CASCADE para lograrlo.

				
					DROP SCHEMA principal CASCADE;
				
			

Como se puede apreciar, se eliminaron todos los objetos dependientes, dejándonos con una base de datos limpia y consistente, sin objetos obsoletos o inválidos.

Conclusión

En conclusión, los esquemas en PostgreSQL son una herramienta poderosa para organizar y gestionar de manera efectiva las tablas y otros objetos de la base de datos.

Permiten agrupar y separar lógicamente los elementos relacionados, facilitando la administración y la asignación de permisos de seguridad.

Además, las vistas en combinación con los esquemas brindan flexibilidad para presentar datos de manera personalizada y controlada.

Si bien los esquemas no afectan directamente el rendimiento o la optimización del almacenamiento, son fundamentales para mantener una base de datos organizada y consistente.

Con un buen entendimiento de los esquemas y su uso adecuado, los administradores de bases de datos pueden aprovechar al máximo PostgreSQL y garantizar una gestión eficiente de los datos.

Sobre el mismo argumento...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Más leídos (últimos 30 días)

Archivo

Argumentos