49 lines
1.7 KiB
SQL
49 lines
1.7 KiB
SQL
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;
|