Spaces:
Sleeping
Sleeping
-- 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); | |