File size: 1,740 Bytes
a7a6ad0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
333834a
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
-- 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);