馃 ¿Qu茅 es un esquema?
Un esquema (schema) en PostgreSQL es una forma de organizar y agrupar objetos dentro de una base de datos.
馃憠 Es como una carpeta dentro de una base de datos.
Dentro de un esquema puedes tener:
Tablas
Vistas
Funciones
脥ndices
Secuencias
馃幆 Ejemplo conceptual
Imagina una base de datos llamada:
empresa_db
Dentro puedes tener esquemas como:
ventas
recursos_humanos
finanzas
Y dentro de cada esquema sus propias tablas:
empresa_db
├── ventas.clientes
├── ventas.pedidos
├── recursos_humanos.empleados
├── finanzas.facturas
馃摝 ¿Para qu茅 se usan los esquemas?
Los esquemas sirven principalmente para:
1. 馃梻️ Organizar objetos
Separar l贸gica y funcionalidad dentro de la misma base de datos.
Ejemplo:
Esquema auth → usuarios y permisos
Esquema app → l贸gica de la aplicaci贸n
Esquema reporting → reportes
2. 馃敀 Controlar accesos
Puedes dar permisos por esquema en lugar de tabla por tabla.
GRANT USAGE ON SCHEMA ventas TO usuario_app;
3. 馃毇 Evitar conflictos de nombres
Puedes tener tablas con el mismo nombre en distintos esquemas.
ventas.clientes
soporte.clientes
4. 馃彈️ Soporte para m煤ltiples aplicaciones
Una sola base de datos puede contener varios sistemas organizados por esquema.
馃З Esquemas por defecto
Cuando creas una base de datos en PostgreSQL, ya existen esquemas:
馃敼 public
Es el esquema por defecto
Si no especificas esquema, los objetos se crean aqu铆
CREATE TABLE clientes (...);
-- equivale a
CREATE TABLE public.clientes (...);
馃敼 Otros esquemas internos
pg_catalog → funciones y metadatos internos
information_schema → vistas est谩ndar del sistema
馃洜️ Crear un esquema
馃敼 Sintaxis b谩sica
CREATE SCHEMA nombre_schema;
✅ Ejemplo:
CREATE SCHEMA ventas;
馃敼 Crear con propietario
CREATE SCHEMA ventas AUTHORIZATION postgres;
馃П Crear objetos dentro de un esquema
馃敼 Crear una tabla en un esquema espec铆fico
CREATE TABLE ventas.clientes (
id SERIAL PRIMARY KEY,
nombre VARCHAR(100),
email VARCHAR(100)
);
馃敼 Insertar datos
INSERT INTO ventas.clientes (nombre, email)
VALUES ('Juan P茅rez', 'juan@email.com');
馃敼 Consultar datos
SELECT * FROM ventas.clientes;
馃攧 Cambiar el esquema por defecto (search_path)
PostgreSQL usa una variable llamada search_path que define en qu茅 esquemas buscar.
馃敼 Ver configuraci贸n
SHOW search_path;
馃敼 Cambiar esquema por defecto
SET search_path TO ventas;
Ahora puedes hacer:
SELECT * FROM clientes;
(en lugar de ventas.clientes)
馃棏️ Eliminar un esquema
DROP SCHEMA nombre_schema;
⚠️ Ejemplo:
DROP SCHEMA ventas;
馃敼 Eliminar con todo su contenido
DROP SCHEMA ventas CASCADE;
馃毃 Esto elimina:
Tablas
Vistas
Funciones
馃攼 Permisos en esquemas
馃敼 Dar acceso
GRANT USAGE ON SCHEMA ventas TO usuario_app;
``
馃敼 Permitir crear objetos
GRANT CREATE ON SCHEMA ventas TO usuario_app;
⚖️ Esquemas vs Bases de Datos
馃憠 Resumen:
Base de datos = contenedor principal
Esquema = organizaci贸n interna
馃挕 Buenas pr谩cticas
✅ 1. No usar solo public
Define esquemas propios para organizar mejor.
✅ 2. Nombres claros
ventas
auth
reportes
✅ 3. Separar por dominio
core → l贸gica principal
audit → auditor铆a
api → capa de exposici贸n
✅ 4. Evitar mezclar todo
❌ Mala pr谩ctica:
public (todo aqu铆)
✅ Buena pr谩ctica:
app.usuarios
app.productos
audit.logs
✅ 5. Controlar permisos por esquema
M谩s simple y seguro que hacerlo por tabla.
馃殌 Caso pr谩ctico simple
-- Crear esquema
CREATE SCHEMA ecommerce;
-- Crear tabla
CREATE TABLE ecommerce.productos (
id SERIAL PRIMARY KEY,
nombre VARCHAR(100),
precio NUMERIC(10,2)
);
-- Insertar datos
INSERT INTO ecommerce.productos (nombre, precio)
VALUES ('Laptop', 15000.00);
-- Consultar
SELECT * FROM ecommerce.productos;
✅ Conclusi贸n
Los esquemas son una herramienta clave en PostgreSQL para:
Organizar la base de datos
Mejorar la seguridad
Escalar proyectos
Mantener orden en sistemas grandes
Si usas correctamente los esquemas desde el inicio, tu base de datos ser谩 mucho m谩s mantenible y profesional.
No hay comentarios:
Publicar un comentario