Guía Detallada para Avanzar en PostgreSQL
Vamos a explorar cada punto con explicaciones claras y muchos ejemplos prácticos para que aprendas PostgreSQL a fondo.
1. Configuración avanzada del servidor y optimización
PostgreSQL usa un archivo llamado postgresql.conf para ajustar su comportamiento.
listen_addresses: en qué interfaces de red escucha; por defecto es todas ('*').
port: puerto estándar es 5432.
max_connections: máximo de conexiones concurrentes; por ejemplo, 100.
shared_buffers: memoria usada para caching, se recomienda ~25% de RAM.
work_mem: memoria para operaciones de ordenamiento y joins; un valor típico es 8MB.
maintenance_work_mem: para mantenimiento como VACUUM.
effective_cache_size: estima la caché del sistema operativo para planificación de consultas.
Ejemplo básico de configuración:
text
listen_addresses = '*'
port = 5432
max_connections = 100
shared_buffers = 1024MB
work_mem = 8MB
maintenance_work_mem = 256MB
effective_cache_size = 2048MB
Para aplicar cambios: generalmente con SELECT pg_reload_conf(); o reiniciar el servidor.
2. Tipos de datos complejos y funciones avanzadas
PostgreSQL soporta tipos avanzados:
ARRAY: almacenar listas en una columna.
JSON / JSONB: datos estructurados para aplicaciones web.
hstore: pares clave-valor.
UUID: identificadores únicos.
Tipos geométricos, rango, XML, y más.
Ejemplo con JSONB:
sql
CREATE TABLE productos (
id SERIAL PRIMARY KEY,
info JSONB
);
INSERT INTO productos (info) VALUES ('{"nombre": "Manzana", "precio": 1.25}');
-- Consultar precio
SELECT info->>'precio' AS precio FROM productos;
Funciones avanzadas incluyen agregados personalizados, funciones de ventana, expresiones regulares, y SQL/PL.
3. Índices, vistas, secuencias y otros objetos
Índices aceleran búsquedas:
sql
CREATE INDEX idx_nombre ON empleados(nombre);
Vistas Son consultas guardadas:
sql
CREATE VIEW vista_ventas AS
SELECT cliente, SUM(total) AS total_ventas FROM ventas GROUP BY cliente;
Secuencias para números automáticos:
sql
CREATE SEQUENCE seq_pedido START 1;
SELECT nextval('seq_pedido');
Otros objetos: funciones, triggers, esquemas.
4. Consultas complejas y optimización
Uso de JOINs para unir tablas:
sql
SELECT e.nombre, d.nombre AS departamento
FROM empleados e
JOIN departamentos d ON e.departamento_id = d.id;
Subconsultas:
sql
SELECT nombre FROM empleados WHERE salario > (SELECT AVG(salario) FROM empleados);
Funciones de ventana:
sql
SELECT nombre, salario, RANK() OVER (ORDER BY salario DESC) FROM empleados;
Optimización:
Usa EXPLAIN para ver el plan de ejecución.
Crea índices apropiados.
Evita SELECT * si no necesitas todas las columnas.
Usa LIMIT y OFFSET para paginación.
5. Seguridad, roles y autenticación
Crear roles:
sql
CREATE ROLE lector LOGIN PASSWORD 'pass123';
GRANT SELECT ON empleados TO lector;
Revocar permisos:
sql
REVOKE SELECT ON empleados FROM lector;
Configuración en pg_hba.conf controla qué hosts y con qué métodos pueden conectar.
6. Replicación, backups y recuperación
Replicación: permite tener copias de la base para alta disponibilidad.
Configurar wal_level, max_wal_senders, hot_standby.
Replica física o lógica.
Backups:
pg_dump para backups lógicos.
pg_basebackup para copias físicas.
Recuperación:
Restaurar con pg_restore o psql.
Point-In-Time Recovery configurando WAL.
7. PL/pgSQL: procedimientos almacenados y triggers
Crear función:
sql
CREATE FUNCTION suma(a INT, b INT) RETURNS INT AS $$
BEGIN
RETURN a + b;
END;
$$ LANGUAGE plpgsql;
Crear trigger para log de inserciones:
sql
CREATE TABLE log_inserciones (id SERIAL, tabla TEXT, fecha TIMESTAMP);
CREATE FUNCTION log_insert() RETURNS trigger AS $$
BEGIN
INSERT INTO log_inserciones(tabla, fecha) VALUES (TG_TABLE_NAME, now());
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trig_insert
AFTER INSERT ON empleados
FOR EACH ROW EXECUTE FUNCTION log_insert();
8. Integración y gestión de rendimiento
Pools de conexiones con PgBouncer para manejar muchas conexiones.
Monitoreo con herramientas como pg_stat_activity, pg_stat_statements.
Profiling y optimización con EXPLAIN ANALYZE.
Integración en aplicaciones con drivers (psycopg2 para Python, pg JDBC, etc).
Ajuste de parámetros según uso para mejorar rendimiento.
Conclusión
Esta guía te da los fundamentos y ejemplos necesarios para avanzar hacia un dominio completo de PostgreSQL. Para cada punto, te recomiendo practicar en un entorno real y usar documentación oficial para profundizar según tus necesidades.
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter