PostgreSQL avanzado: JSONB, arrays y todo lo que SQLite no tiene

JSONB de verdad, arrays nativos, window functions, CTEs recursivos, upsert, full-text search, particionado y triggers — sobre Postgres real, compilado a WebAssembly.

13 aulas · 8 horas de práctica · en el navegador, sin instalar nada

Temario

  1. JSONB: un documento adentro de una columna — Por qué JSONB no es "un TEXT con JSON adentro": los operadores ->, ->> y @>, y el índice GIN que los hace rápidos incluso con millones de filas.
  2. Arrays nativos: una columna que guarda varios valores — INTEGER[]/TEXT[], ARRAY[...], = ANY(), UNNEST() — y cuándo un array de columna tiene sentido frente a una tabla relacionada aparte.
  3. Window functions: agregar sin perder la fila — El problema que GROUP BY no resuelve: ROW_NUMBER(), RANK(), PARTITION BY y OVER (ORDER BY...) calculan un ranking o un acumulado sin colapsar las filas.
  4. CTEs: nombrarle un paso a una consulta, y recorrer un árbol — WITH ... AS (...) para partir una consulta larga en pasos legibles, y WITH RECURSIVE para recorrer jerarquías (categorías, organigramas) sin saber de antemano cuántos niveles tienen.
  5. RETURNING y upsert: evitar un segundo viaje a la base — RETURNING devuelve lo que un INSERT/UPDATE/DELETE acaba de cambiar, sin un SELECT aparte. ON CONFLICT ... DO UPDATE resuelve "insertar o actualizar" en una sola sentencia atómica.
  6. Taller — Catálogo con carrito — Un catálogo de productos con atributos variables (JSONB) y tags (array), y un carrito con upsert atómico — JSONB, arrays, CTE y upsert, en un caso chico y realista.
  7. Índices más allá del B-tree, y cómo leer un EXPLAIN ANALYZE — GIN para JSONB, arrays y full-text; y las primeras herramientas para leer un plan de ejecución: seq scan vs. index scan, costo estimado vs. tiempo real.
  8. Full-text search: buscar texto de verdad, no con LIKE — to_tsvector, to_tsquery y @@ entienden idioma (raíces de palabras, orden irrelevante) y usan un índice — algo que LIKE '%...%' no puede hacer.
  9. Particionado declarativo: partir una tabla grande en pedazos — PARTITION BY RANGE/LIST divide una tabla lógicamente en varias tablas físicas más chicas — transparente para quien consulta, pero clave cuando una tabla crece sin límite.
  10. Funciones y triggers en PL/pgSQL — CREATE FUNCTION ... LANGUAGE plpgsql para lógica reusable adentro de la base, y un trigger AFTER UPDATE que reacciona sola cuando cambia un dato — sin que ninguna aplicación tenga que acordarse de hacerlo.
  11. Cierre: JSONB, arrays, CTEs y window functions, juntos — Una consulta más grande que combina JSONB, arrays, un CTE y una window function, y una guía de cuándo usar cada herramienta de esta carrera.
  12. Taller — Dashboard de analítica — Un log de eventos de verdad: gasto acumulado por usuario (CTE + window function), búsqueda de incidentes (full-text search), y un historial de compras confirmadas que combina las tres cosas — el cierre de todo el curso.
  13. Taller — ¿Quién rompió producción? — Un incidente de producción de verdad: WHERE y ORDER BY sobre el historial de deploys, JOIN y JSONB sobre los logs, una CTE con ROW_NUMBER() para encontrar la falla que sigue viva, y una última CTE con BETWEEN que confirma quién tenía la terminal abierta a esa hora.

Es parte de