Preloaded in every project
These extensions are available at project provision time withoutCREATE EXTENSION. Powabase’s own init scripts add vector and pg_net; the others come from the upstream supabase/postgres:15.8.1.085 image’s default init.
| Extension | Schema | What it does |
|---|---|---|
vector (pgvector) | public | Vector similarity search with HNSW / IVFFlat indexes |
pg_net | extensions | Async HTTP from inside Postgres (used by DB webhooks) |
pgcrypto | public | Cryptographic functions (gen_random_uuid, crypt, digest, etc.) |
uuid-ossp | extensions | Alternative UUID generation (uuid_generate_v4, etc.) |
pg_graphql | preloaded library | GraphQL on top of Postgres, callable via POST /rest/v1/rpc/graphql |
vault | preloaded library | Encrypted secret storage. Available via direct Postgres only — no platform code uses it. |
pgcrypto’s gen_random_uuid() is what your CREATE TABLE ... id uuid DEFAULT gen_random_uuid() columns use. No setup needed.
pg_net is in the extensions schema (not public) so its functions don’t pollute the default search path. Call them as extensions.http_post(...) or SET search_path TO extensions, public first.
You-can-install
The Postgres image (supabase/postgres:15.8.1.085) includes a long list of extensions you can install yourself with CREATE EXTENSION. The most useful for application code:
| Extension | Schema | What it does |
|---|---|---|
pg_trgm | extensions | Trigram similarity for fuzzy text matching, useful for autocomplete |
unaccent | extensions | Strip accents from text for diacritic-insensitive search |
citext | extensions | Case-insensitive text type — WHERE email = 'foo@bar.com' matches Foo@Bar.com |
btree_gin, btree_gist | extensions | GIN / GiST index support for scalar types alongside JSONB / tsvector |
postgres_fdw | extensions | Query a different Postgres database as if it were a local table |
hstore | extensions | Key-value type (less common now that JSONB exists, but still supported) |
tsm_system_rows | extensions | TABLESAMPLE SYSTEM_ROWS(N) for fast random sampling |
intarray | extensions | GIN-indexable integer-array operators |
extensions schema:
supabase_admin (via the Database URL) — anon, authenticated, and service_role don’t have CREATE on the database.
Not available
Some extensions you might be looking for that aren’t in the Powabase Postgres image:| Extension | Status |
|---|---|
pg_cron | Not enabled. Scheduling jobs in-database isn’t supported on Powabase; use a workflow with a cron trigger instead. |
pg_jsonschema | Not present. Use CHECK constraints or application-level validation. |
pgsodium | Not enabled. Use pgcrypto for crypto, or move secrets to your application config. |
postgis | Not in the standard image. If you need it, contact support. |
pgmq, pg_partman, etc. | Various community extensions — file a platform request if you need one. |
Listing what’s available
To see what’s installed in your project right now:CREATE EXTENSION:
CREATE EXTENSION foo SCHEMA extensions to install any of them.
What lives where
Extensions install their objects (functions, types, tables) into a schema. Powabase’s convention is to put platform-preloaded extensions inextensions (for clean search_path defaults), with vector and pgcrypto in public (the standard Supabase pattern). Anything you CREATE EXTENSION yourself should also go in extensions.
If you’re getting “function does not exist” errors after installing an extension, check the schema — most extension functions don’t end up in public and need to be qualified (extensions.http_post(...)) or have extensions added to your search_path.
Next steps
Schemas
The five schemas extensions might land in.
User-managed pgvector
The most common use of a preloaded extension.
DB webhooks
The pg_net-based pattern that turns Postgres changes into HTTP calls.
Direct Postgres
The connection you’ll use to install extensions.