Getting Started

Add a Database — Heroku Postgres

Heroku-specific quirks: tier matters, no SPL access, allowlist is different.

Heroku Postgres is reachable and onboardable, but tier matters more than on most managed providers. Hobby and Essential tiers lack the extension allowlist and heroku pg:settings access, so monitoring is significantly limited. Standard or higher gets you the full picture.

Prerequisites

Heroku Postgres add-on on Standard or higher. Output of heroku pg:credentials:url for your DB. That's it — there's no firewall to configure (Heroku has its own connection model with rate-limiting and proxy-layer protection, no security groups or authorized networks). The credentials in DATABASE_URL work from anywhere.

Get the connection string

heroku pg:credentials:url --app your-app
# postgres://user:[email protected]:5432/dbname?sslmode=require

Onboard

  1. app.monpg.app → Setup → Heroku.
  2. Hosted — Auto-setup.
  3. Fill in the connection from the URL: host, user, password, database, sslmode=require.
  4. Test connection → pick databases → Provision.

Extension support by tier

ExtensionHobby/EssentialStandard+
pg_stat_statementspreloadedpreloaded
pgstattuplenot allowedallowed
pg_buffercachenot allowedallowed
hypopg
pgaudit / auto_explain / pg_wait_samplingnot allowed (no SPL access)not allowed
pgvector / postgis / pg_partmanvariesallowed

The big absence is anything that requires shared_preload_libraries editing — Heroku doesn't expose SPL on any tier. That means no auto_explain, no pgaudit, no pg_wait_sampling. pg_stat_statements is preloaded on all tiers because Heroku enables it for everyone by default.

GUC tuning via heroku pg:settings

Standard+ exposes a small set of tunable GUCs:

heroku pg:settings --app your-app
heroku pg:settings:set log_min_duration_statement=1000 --app your-app

MonPG's recommended GUC values apply to whatever knobs are exposed; the rest are platform-managed and you can't change them.

Logs

For Cedar runtime (most apps), set up a Logplex syslog drain pointing at MonPG's log ingest. For Fir runtime (newer, OTLP-native), use OTLP telemetry. Settings → Servers → Logs gives you the exact drain URL for your account.

Verify

The server reports online within 30 seconds. The slow-query catalog populates as queries run, since pg_stat_statements only sees activity from the moment it was enabled (which on Heroku is "always" since it's preloaded by default).