Heroku Postgres is managed Postgres on the Heroku platform (a Salesforce company), offering a fixed allow-list of extensions — pgvector, postgis, hstore and more — that you enable with a CREATE EXTENSION statement over psql.
vector data type and ivfflat and hnsw access methods
Extension to manage partitioned tables by time or ID
Extension to manage partitioned tables by time or ID
connect to other PostgreSQL databases from within a database
connect to other PostgreSQL databases from within a database
calculate great-circle distances on the surface of the Earth
determine similarities and distance between strings
functions, operators, and index support for 1-D arrays of integers
data types for international product numbering standards
track planning and execution statistics of all SQL statements executed
track planning and execution statistics of all SQL statements executed
text similarity measurement and index searching based on trigrams
text similarity measurement and index searching based on trigrams
foreign-data wrapper for remote PostgreSQL servers
data type for representing line segments or floating-point intervals
functions that manipulate whole tables, including crosstab
functions that manipulate whole tables, including crosstab
TABLESAMPLE method which accepts number of rows as a limit
generate universally unique identifiers (UUIDs)
Heroku is deliberately restrictive: the only way to enable an extension is to run CREATE EXTENSION in a psql session against your database. There is no dashboard toggle and no access to shared_preload_libraries, so anything that needs a preloaded background worker (like pg_cron) simply isn't on the menu. You can only enable extensions that appear on Heroku's published allow-list.
Once connected, enable, schema-place, upgrade, and inspect extensions with standard SQL. As of recent platform updates, extensions install into public — the heroku_ext schema is no longer required.
-- Enable an extension (installs into public)
CREATE EXTENSION hstore;
-- Or place it in a specific schema
CREATE EXTENSION hstore WITH SCHEMA myschema;
-- Upgrade an already-installed extension to a newer version
ALTER EXTENSION hstore UPDATE TO '1.8';
-- List everything installed
\dx
-- Check the live allow-list (Standard / Advanced)
-- echo 'SHOW extwlist.extensions' | heroku pg:psql -a example-app
-- On the Essential tier (RDS-backed) the list is:
-- echo 'SHOW rds.allowed_delegated_extensions' | heroku pg:psql -a example-appOpen a psql session with the Heroku CLI, then enable extensions with plain SQL. Use heroku data:pg:psql on the Advanced tier.
# Open a psql session (Essential / Standard tiers)
heroku pg:psql DATABASE_URL -a example-app
# Advanced tier uses the data plugin
heroku data:pg:psql -a example-appThese extensions ship enabled by default — no CREATE EXTENSION needed.
Extensions you might expect that aren't available on Heroku Postgres, with workarounds where they exist.
pg_cronWhy missing: pg_cron requires a background worker loaded via shared_preload_libraries, and Heroku exposes no way to customize that server parameter. It is not on the allow-list and cannot be added.
Alternative: Use the Heroku Scheduler add-on for periodic dyno jobs, or point an external cron (e.g. GitHub Actions) at a Postgres function via heroku pg:psql.
timescaledbWhy missing: timescaledb is not on Heroku's allow-list — it relies on preloaded libraries and background workers that Heroku doesn't permit, and Salesforce isn't actively adding extensions to a mature product.
Alternative: Run native Postgres partitioning with pg_partman (supported on Standard/Advanced tiers), or move time-series workloads to Timescale Cloud or a self-managed instance.
plv8Why missing: plv8 was dropped because upstream Debian/Ubuntu packaging stopped shipping it for Postgres 11 and later, so Heroku can no longer build it into the platform. It is not available on current major versions.
Alternative: Use PL/pgSQL for in-database procedural logic, or run JavaScript in a Heroku dyno (a worker or web process) that talks to the database.
Heroku Postgres uses a fixed allow-list: "Only the extensions listed in this article are available on Heroku Postgres." The list is enforced by the extwlist extension — via extwlist.extensions on Standard/Advanced plans, and via rds.allowed_delegated_extensions on the RDS-backed Essential tier. There is no mechanism to install extensions outside the list, no shared_preload_libraries customization, and no trusted-language extension framework. If you need an extension Heroku doesn't ship, your options are a self-managed Postgres instance or a different managed provider.
1bench is a modern GUI client for PostgreSQL — connect to your Heroku Postgres instance, install extensions, write queries, and inspect schemas without leaving the IDE.
Try 1bench for PostgreSQL