Installation
Add the bundle to your composer.json:
composer require czogori/pghero-bundle
Enable it in config/bundles.php:
return [
// ...
Czogori\PgHeroBundle\PgHeroBundle::class => ['all' => true],
];
Database Configuration
Ensure your config/packages/doctrine.yaml includes PostgreSQL connection details (required for PgHero to function):
doctrine:
dbal:
connections:
default:
url: '%env(DATABASE_URL)%'
driver: 'pdo_pgsql'
First Use Case
Access the profiler tab via Symfony’s Profiler (/_profiler/). Navigate to the "PgHero" tab to inspect PostgreSQL metrics like:
Debugging Slow Queries
SELECT query takes >500ms, analyze its EXPLAIN ANALYZE plan in PgHero.Monitoring Database Health
pgbouncer usage).Schema Optimization
pg_repack candidates).Integration with Custom Tools
use Symfony\Component\HttpKernel\Event\RequestEvent;
public function onKernelRequest(RequestEvent $event) {
$query = $event->getRequest()->query->get('query');
if (str_contains($query, 'slow_pattern')) {
// Log to external service
}
}
pg_hero.enabled: false in config/packages/czogori_pghero.yaml./_profiler/doctrine) alongside PgHero for ORM-level insights.symfony/monolog-bundle for critical thresholds).Performance Overhead
# config/packages/czogori_pghero.yaml
pg_hero:
enabled: '%kernel.debug%' # Only in dev
Missing PostgreSQL Extensions
pg_stat_statements. Ensure they’re enabled:
CREATE EXTENSION pg_stat_statements;
pg_extension table for missing extensions.Permission Issues
SELECT privileges on pg_stat_* views.GRANT SELECT ON ALL TABLES IN SCHEMA public TO your_user;
Outdated Data
pg_hero:
cache_lifetime: 5 # Refresh every 5 seconds
SELECT * FROM pg_stat_activity WHERE state = 'active';
bundles.php.%kernel.debug% = true).Custom Metrics Add your own PostgreSQL queries to PgHero by extending the bundle’s DataCollector:
use Czogori\PgHeroBundle\DataCollector\PgHeroDataCollector;
class CustomPgHeroCollector extends PgHeroDataCollector {
public function collect($data) {
$data['custom_metric'] = $this->getCustomQueryResult();
return $data;
}
}
Register it in services.yaml:
services:
App\DataCollector\CustomPgHeroCollector:
tags: ['data_collector']
Override Templates Customize PgHero’s Twig templates by overriding the bundle’s resources:
# config/packages/twig.yaml
twig:
paths:
'%kernel.project_dir%/templates/czogori_pghero': CzogoriPgHeroBundle
How can I help you explore Laravel packages today?