CREATE EXTENSION IF NOT EXISTS vector; CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE TABLE IF NOT EXISTS vector_stores ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name VARCHAR(255) NOT NULL, owner_user_id VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT NOW() ); CREATE TABLE IF NOT EXISTS documents ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), store_id UUID REFERENCES vector_stores(id) ON DELETE CASCADE, content TEXT NOT NULL, metadata JSONB DEFAULT '{}', embedding vector(1024), created_at TIMESTAMP DEFAULT NOW() ); CREATE TABLE IF NOT EXISTS store_permissions ( store_id UUID REFERENCES vector_stores(id) ON DELETE CASCADE, user_id VARCHAR(255) NOT NULL, permission VARCHAR(50) DEFAULT 'read', PRIMARY KEY (store_id, user_id) ); CREATE TABLE IF NOT EXISTS usage_stats ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id VARCHAR(255) NOT NULL, store_id UUID REFERENCES vector_stores(id) ON DELETE SET NULL, action VARCHAR(50) NOT NULL, tokens INT DEFAULT 0, duration FLOAT DEFAULT 0, created_at TIMESTAMP DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS idx_documents_store ON documents(store_id); CREATE INDEX IF NOT EXISTS idx_documents_embedding ON documents USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100); CREATE INDEX IF NOT EXISTS idx_usage_user ON usage_stats(user_id); CREATE INDEX IF NOT EXISTS idx_usage_created ON usage_stats(created_at); GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO vecuser; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO vecuser;