Extensions Overview — What MonPG Uses and Why
The nine PostgreSQL extensions MonPG reads from, what each unlocks in the product, and which provider ships which.
MonPG reads from nine PostgreSQL extensions, but only one is required: pg_stat_statements. Without it the Queries / Query Advisor / Compare / Index Advisor pages have no data and we'd be reduced to system-level metrics. Every other extension on the list is optional and unlocks a specific feature.
The mental model is three buckets, by who installs them.
What MonPG installs (you opt in)
Three extensions are safe enough that we'll install them for you during Provision if you tick the box. They install with plain CREATE EXTENSION, no shared_preload_libraries changes, no restart. They're reversible with DROP EXTENSION.
pgstattuple lights up table and index bloat percentages on the Tables and Indexes pages. Without it those columns show estimates from pg_stats, which are noisier. hypopg turns Index Advisor from passive heuristics into "would this index actually help" simulations — the planner runs against a hypothetical index without you committing disk. pg_buffercache exposes shared_buffers contents so the System page can show what's actually hot in memory.
None of these change query behavior. They just give MonPG more to read.
What you install yourself
Three extensions need shared_preload_libraries changes plus a database restart. We will not do that for you, ever. The decision to restart your DB belongs to you, and the SPL list parsing risk (you have other things in there we'd need to merge with) is too high for us to take.
pgaudit is statement-level audit logging for compliance. It writes structured records to stderr that show up in your logs and feed Log Insights. auto_explain automatically captures EXPLAIN output for slow queries — this is the input that turns Query Advisor from a "list of slow queries" into "here's the bottleneck node and here's what to do about it." pg_wait_sampling records wait events over time, so you can see what each backend was waiting on historically rather than only what it's waiting on at the instant you happened to query pg_stat_activity.
For each, the install is the same shape: add to SPL, restart, CREATE EXTENSION, configure the relevant GUCs. The provider-specific paths (Parameter Group on RDS, Server Parameters blade on Azure, flags on Cloud SQL, postgresql.conf on self-hosted) are documented on each extension's own page.
Application-owned
The remaining ones — pgvector, postgis, timescaledb, pg_cron, pg_partman — are extensions your application installs because your application uses them. MonPG never installs them. If they happen to be present we read what's relevant (vector index health, partman partition counts, etc.) and surface it in the right product pages.
Provider matrix
Not every extension is available on every cloud. Heroku is the most restrictive (no SPL access on any tier, plus several extensions absent from the extwlist). AWS RDS removed timescaledb's TSL features (Apache edition only — no compression, no continuous aggregates). Cloud SQL doesn't ship hypopg. Azure ships everything but requires the azure.extensions allowlist dance.
| Extension | RDS | Azure | Cloud SQL | Heroku | Crunchy | Aiven | Self-hosted |
|---|---|---|---|---|---|---|---|
| pg_stat_statements | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| pgstattuple | ✓ | ✓ | ✓ | Standard+ | ✓ | ✓ | ✓ |
| hypopg | ✓ | ✓ | — | — | ✓ | — | ✓ |
| pg_buffercache | ✓ | ✓ | ✓ | Standard+ | ✓ | ✓ | ✓ |
| pgaudit | via PG | via SP | via flag | — | via SQL | via pg.* | postgresql.conf |
| auto_explain | via PG | via SP | via flag | — | via SQL | — | postgresql.conf |
| pg_wait_sampling | — | — | via flag | — | request | — | ✓ |
| timescaledb | Apache | full | — | — | Apache | full | full |
| pgvector | 15.2+ | ✓ | 15+ | ✓ | ✓ | ✓ | ✓ |