Rati Rukhadze a publié Vacuum, un paquet de surveillance PostgreSQL et de vérification de schéma pour Laravel. Plutôt que d'ajouter une nouvelle instrumentation, il interroge les statistiques déjà collectées en interne par PostgreSQL, via des vues comme pg_stat_user_tables, pg_stat_activity et pg_stat_statements, et transforme les résultats en une liste de problèmes accompagnés du SQL permettant de les corriger.

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

Le paquet applique 13 règles d'analyse couvrant des sujets comme le risque de wraparound des identifiants de transaction, le bloat des tables, les tuples morts, les index inutilisés et les requêtes lentes. Les constats alimentent un score de santé global sur 100. Les résultats s'affichent soit dans un tableau de bord Blade accessible via la route /vacuum, soit via un plugin dédié pour Filament 4 et 5.

Deux commandes Artisan intègrent ces vérifications dans l'automatisation : vacuum:check peut faire échouer un build en cas de constats critiques, tandis que vacuum:lint signale des problèmes de schéma comme des clés étrangères non indexées lors des exécutions CI. Les seuils sont configurables dans config/vacuum.php, par exemple dead_tuple_ratio vaut 0,20 par défaut et slow_query_milliseconds vaut 500. Une fonction d'historique conserve des instantanés planifiés pour suivre les tendances et anticiper les problèmes, complétée par 13 leçons qui expliquent les problèmes PostgreSQL courants en s'appuyant sur les propres tables du développeur, notamment les schémas de requêtes N+1.

Vacuum 1.2.0 nécessite PostgreSQL 14 et Laravel 11 ou plus récent. L'extension pg_stat_statements est optionnelle ; en son absence, le tableau de bord se contente de signaler qu'elle manque. L'installation se fait via Composer suivi d'une commande d'installation. Le tableau de bord n'est accessible par défaut qu'en environnement local ; ailleurs, il faut enregistrer un callback personnalisé via la méthode Vacuum::auth(), par exemple pour restreindre l'accès aux administrateurs authentifiés.