Building RAG with Supabase pgvector
Supabase pgvector enables vector similarity search directly in PostgreSQL — perfect for RAG applications.
Enable pgvector
```sql
CREATE EXTENSION IF NOT EXISTS vector;
```
Create Embeddings Table
```sql
CREATE TABLE documents (
id BIGSERIAL PRIMARY KEY,
content TEXT NOT NULL,
embedding VECTOR(1536) -- OpenAI ada-002 dimensions
);
CREATE INDEX ON documents USING ivfflat (embedding vector_cosine_ops)
WITH (lists = 100);
```
Store Embeddings
```typescript
import { createClient } from '@supabase/supabase-js'
import OpenAI from 'openai'
const openai = new OpenAI()
const supabase = createClient(URL, KEY)
// Generate embedding
const { data } = await openai.embeddings.create({
model: 'text-embedding-ada-002',
input: 'Your document text here',
})
// Store in Supabase
await supabase.from('documents').insert({
content: 'Your document text here',
embedding: data[0].embedding,
})
```
Query Similar Documents
```sql
CREATE FUNCTION match_documents(query_embedding VECTOR(1536), match_count INT)
RETURNS TABLE (id BIGINT, content TEXT, similarity FLOAT)
AS $$
SELECT id, content, 1 - (embedding <=> query_embedding) AS similarity
FROM documents
ORDER BY embedding <=> query_embedding
LIMIT match_count;
$$ LANGUAGE sql;
```