TL;DR: # Postgres extensions: migration-managed, not click-managed Extensions like pgvector, pg_cron, pg_net, and pg_trgm change what your database can do. Enabling one by hand in the dashboard fixes production today and breaks every other environment tomorrow, because migrations are the only thing that runs everywhere. ## Checkable procedure 1.

## Fix
1. # Postgres extensions: migration-managed, not click-managed Extensions like pgvector, pg_cron, pg_net, and pg_trgm change what your database can do.
   Expected: this specific failure stops.
2. Commit it, review it, deploy it through the normal pipeline like any schema change.
   Expected: this specific failure stops.
3. Check the extension is available on your plan and Postgres version before depending on it.
   Expected: the value or setting is exactly right, nothing ambiguous.
4. Some setups install extensions into a dedicated schema; unqualified function calls from other schemas then fail.
   Expected: this specific failure stops.
5. Qualify or set search_path deliberately.
   Expected: this specific failure stops.
6. After enabling, verify in every environment: local, branch, staging, production.
   Expected: this specific failure stops.
7. A major version bump can change function signatures your code depends on. ## Quick test Spin up a fresh local database, run migrations from zero, and confirm the extension-dependent code works.
   Expected: this specific failure stops.

## Details
Write `create extension if not exists [name];` in a migration file. 2. Not every extension is installable on every project; the docs list what is supported. 3. Be explicit about the schema when it matters. 4. 5. Treat extension upgrades like migrations: test on a branch first. If it only works on databases where someone clicked the dashboard, the migration is missing.

## When to use
You hit exactly this: Supabase Postgres extensions: enable in a migration, not by hand in the dashboard in Supabase Postgres extensions.

## When not to use
A different error, or the same symptom in a different tool. This page only covers the failure above.

## Compatibility
Supabase Postgres extensions.

## Root cause
Enabling one by hand in the dashboard fixes production today and breaks every other environment tomorrow, because migrations are the only thing that runs everywhere. ## Checkable procedure 1.

## Edge cases
- "Works locally" with a hand-enabled extension is the classic trap.