Funciones de ventana
ROW_NUMBER, LAG, agregados acumulados. Guía de PostgreSQL orientada a producción.
Receta
SELECT id, total,
sum(total) OVER (PARTITION BY account_id ORDER BY id) AS running_total
FROM app.orders;Cuándo usar esto: Implementas o revisas SQL usando este concepto en PostgreSQL 18.
Ejemplo de trabajo
SELECT account_id, avg(total) OVER () AS global_avg FROM app.orders;Qué demuestra esto:
- SQL idiomático de PostgreSQL 18
- Patrones adecuados para la revisión de EXPLAIN
- Valores predeterminados seguros para cargas de trabajo OLTP
Profundización
Mecanismo
- El analizador construye el árbol de consulta.
- El ejecutor ejecuta los nodos del plan.
- MVCC proporciona aislamiento de instantáneas por sentencia o transacción.
Práctica
- Mantén los ejemplos legibles.
- Prueba con recuentos de filas realistas.
Trampas comunes
- Transacciones largas - Bloquean el vacuum y aumentan la hinchazón. Solución: Confirma rápidamente; establece tiempos de espera.
- Índices faltantes - Escaneos secuenciales bajo carga. Solución: Indexa las columnas de unión y filtro.
- Bloqueos implícitos - Bloqueos sorpresa. Solución: Usa
FOR UPDATEexplícito cuando sea necesario. - Suposición incorrecta de aislamiento - Anomalías bajo escrituras concurrentes. Solución: Elige el nivel deliberadamente.
- Migraciones sin probar - Bloqueo DDL u objetos inválidos. Solución: Prepara las migraciones con datos similares a los de producción.
Alternativas
| Alternativa | Usar cuando | No usar cuando |
|---|---|---|
| Lógica a nivel de aplicación | CRUD simple | Integridad repartida entre servicios |
| Vista materializada | Lecturas repetidas intensivas | Complejidad de actualización |
| Procesador de flujos externo | Eventos entre sistemas | Superficie operativa adicional |
Preguntas frecuentes
¿Se aplica esto a las réplicas?
Las réplicas de solo lectura ejecutan SELECT; las escrituras van al primario.
¿Qué pasa con PgBouncer?
La agrupación de transacciones afecta a las características a nivel de sesión; usa el modo de sesión cuando sea necesario.
Relacionado
- Conceptos básicos de SQL avanzado - resumen
Versiones de la pila: Esta página fue escrita para PostgreSQL 18.4 (estable 18, mantenimiento 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x y PostGIS 3.5+.