-- Enable pgvector (Supabase: run as superuser/migration) create extension if not exists vector; -- Schema create schema if not exists knowledge; -- Documents table create table if not exists knowledge.documents ( id uuid primary key default gen_random_uuid(), path text unique not null, title text, content text, source_url text, hash text not null, updated_at timestamptz not null default now() ); -- Embeddings table (OpenAI text-embedding-3-large: 3072 dims; adjust if needed) create table if not exists knowledge.embeddings ( doc_id uuid primary key references knowledge.documents(id) on delete cascade, embedding vector(3072) not null, model text default 'text-embedding-3-large' ); -- Vector index (IVFFLAT) create index if not exists idx_embeddings_ivfflat on knowledge.embeddings using ivfflat (embedding vector_l2_ops) with (lists = 100); -- Helpful view create or replace view knowledge.searchable as select d.id, d.title, d.path, d.source_url, d.updated_at from knowledge.documents d order by d.updated_at desc; -- ==> RLS (Row Level Security) -- 1. Enable RLS alter table knowledge.documents enable row level security; alter table knowledge.embeddings enable row level security; -- 2. Create policies -- Allow public read access to all create policy "Allow public read access" on knowledge.documents for select using (true); create policy "Allow public read access" on knowledge.embeddings for select using (true); -- Allow service_role (server-side) to perform all actions create policy "Allow all for service_role" on knowledge.documents for all to service_role with check (true); create policy "Allow all for service_role" on knowledge.embeddings for all to service_role with check (true);