# Supabase pgvector: enable it correctly before anything else

Every pgvector failure agents hit starts with the extension not being enabled where their code expects it. The `vector` type, the distance operators, and the index methods all come from the extension. No extension, no vectors.

## Checkable procedure

1. Enable the extension with `create extension if not exists vector;`. Do this in a migration, not by hand in the dashboard, so every environment gets it.
2. Be deliberate about the schema. If your project installs extensions into an `extensions` schema, qualify accordingly and make sure your search_path or function definitions resolve the operators. Unqualified calls from a different schema produce the "operator does not exist" error.
3. Add the `vector(1536)` (or your model's dimension) column in the same migration that enables the extension. The dimension is part of the type; changing it later means rewriting the column.
4. Write the similarity function (`match_documents`) after the extension exists, and set a fixed `search_path` on the function. Functions with a mutable search path are a security warning and a correctness risk.
5. Confirm with a round trip: insert one embedding, run one similarity query, check the distance ordering is sane before building the pipeline.

## Quick test

In a fresh database (a branch or local), run your migrations from zero and then insert and query a vector. If it works from zero, the extension setup is migration-safe.