Rati Rukhadze ha publicado Vacuum, un paquete de monitorización de PostgreSQL y revisión de esquemas para Laravel. En lugar de añadir nueva instrumentación, consulta las estadísticas que PostgreSQL ya recopila internamente, a través de vistas como pg_stat_user_tables, pg_stat_activity y pg_stat_statements, y convierte los resultados en una lista de problemas junto con el SQL necesario para corregirlos.

terminal
php artisan vacuum:check
php artisan vacuum:check --fail-on=warning # critical, warning, info, or never
php artisan vacuum:check --format=json # score, grade, deductions, findings

El paquete aplica 13 reglas de análisis que cubren cuestiones como el riesgo de wraparound de identificadores de transacción, el bloat de tablas, las tuplas muertas, los índices sin usar y las sentencias lentas. Los hallazgos alimentan un puntaje de salud general sobre 100. Los resultados se muestran en un panel Blade accesible desde la ruta /vacuum o mediante un plugin dedicado para Filament 4 y 5.

Dos comandos de Artisan integran estas comprobaciones en la automatización: vacuum:check puede hacer fallar un build cuando detecta hallazgos críticos, y vacuum:lint señala problemas de esquema como claves foráneas sin índice durante las ejecuciones de CI. Los umbrales se configuran en config/vacuum.php, por ejemplo dead_tuple_ratio tiene un valor por defecto de 0,20 y slow_query_milliseconds de 500. Una función de historial guarda instantáneas programadas para seguir tendencias y anticipar problemas, junto con 13 lecciones que explican fallos comunes de PostgreSQL usando las propias tablas del desarrollador, incluidos los patrones de consultas N+1.

Vacuum 1.2.0 requiere PostgreSQL 14 y Laravel 11 o superior. La extensión pg_stat_statements es opcional; si falta, el panel simplemente indica su ausencia. La instalación se realiza con Composer seguido de un comando de instalación. El panel solo está abierto por defecto en el entorno local; para acceder desde otros entornos hace falta registrar un callback propio mediante el método Vacuum::auth(), por ejemplo para restringir el acceso a administradores autenticados.