131 lines
4.7 KiB
SQL
131 lines
4.7 KiB
SQL
-- AI Service Database Initialization Script
|
|
-- Version: 0.2.0
|
|
-- Description: Creates all required tables for AI Service with multi-tenant support
|
|
--
|
|
-- Usage:
|
|
-- psql -U postgres -f scripts/init_db.sql
|
|
-- Or connect to ai_service database and run this script
|
|
|
|
-- ============================================
|
|
-- Chat Sessions Table
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS chat_sessions (
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
tenant_id VARCHAR NOT NULL,
|
|
session_id VARCHAR NOT NULL,
|
|
channel_type VARCHAR,
|
|
metadata JSON,
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
|
|
);
|
|
|
|
-- ============================================
|
|
-- Chat Messages Table
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS chat_messages (
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
tenant_id VARCHAR NOT NULL,
|
|
session_id VARCHAR NOT NULL,
|
|
role VARCHAR NOT NULL,
|
|
content TEXT NOT NULL,
|
|
prompt_tokens INTEGER,
|
|
completion_tokens INTEGER,
|
|
total_tokens INTEGER,
|
|
latency_ms INTEGER,
|
|
first_token_ms INTEGER,
|
|
is_error BOOLEAN NOT NULL DEFAULT FALSE,
|
|
error_message VARCHAR,
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
|
|
);
|
|
|
|
-- ============================================
|
|
-- Knowledge Bases Table
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS knowledge_bases (
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
tenant_id VARCHAR NOT NULL,
|
|
name VARCHAR NOT NULL,
|
|
description VARCHAR,
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
|
|
);
|
|
|
|
-- ============================================
|
|
-- Documents Table
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS documents (
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
tenant_id VARCHAR NOT NULL,
|
|
kb_id VARCHAR NOT NULL,
|
|
file_name VARCHAR NOT NULL,
|
|
file_path VARCHAR,
|
|
file_size INTEGER,
|
|
file_type VARCHAR,
|
|
status VARCHAR NOT NULL DEFAULT 'pending',
|
|
error_msg VARCHAR,
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
|
|
);
|
|
|
|
-- ============================================
|
|
-- Index Jobs Table
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS index_jobs (
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
tenant_id VARCHAR NOT NULL,
|
|
doc_id UUID NOT NULL,
|
|
status VARCHAR NOT NULL DEFAULT 'pending',
|
|
progress INTEGER NOT NULL DEFAULT 0,
|
|
error_msg VARCHAR,
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
|
|
);
|
|
|
|
-- ============================================
|
|
-- API Keys Table [AC-AISVC-50]
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS api_keys (
|
|
id UUID NOT NULL PRIMARY KEY,
|
|
key VARCHAR NOT NULL UNIQUE,
|
|
name VARCHAR NOT NULL,
|
|
is_active BOOLEAN NOT NULL DEFAULT TRUE,
|
|
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
|
|
updated_at TIMESTAMP WITHOUT TIME ZONE NOT NULL
|
|
);
|
|
|
|
-- ============================================
|
|
-- Indexes
|
|
-- ============================================
|
|
|
|
-- Chat Sessions Indexes
|
|
CREATE INDEX IF NOT EXISTS ix_chat_sessions_tenant_id ON chat_sessions (tenant_id);
|
|
CREATE UNIQUE INDEX IF NOT EXISTS ix_chat_sessions_tenant_session ON chat_sessions (tenant_id, session_id);
|
|
|
|
-- Chat Messages Indexes
|
|
CREATE INDEX IF NOT EXISTS ix_chat_messages_tenant_id ON chat_messages (tenant_id);
|
|
CREATE INDEX IF NOT EXISTS ix_chat_messages_tenant_session ON chat_messages (tenant_id, session_id);
|
|
CREATE INDEX IF NOT EXISTS ix_chat_messages_tenant_session_created ON chat_messages (tenant_id, session_id, created_at);
|
|
|
|
-- Knowledge Bases Indexes
|
|
CREATE INDEX IF NOT EXISTS ix_knowledge_bases_tenant_id ON knowledge_bases (tenant_id);
|
|
|
|
-- Documents Indexes
|
|
CREATE INDEX IF NOT EXISTS ix_documents_tenant_id ON documents (tenant_id);
|
|
CREATE INDEX IF NOT EXISTS ix_documents_tenant_kb ON documents (tenant_id, kb_id);
|
|
CREATE INDEX IF NOT EXISTS ix_documents_tenant_status ON documents (tenant_id, status);
|
|
|
|
-- Index Jobs Indexes
|
|
CREATE INDEX IF NOT EXISTS ix_index_jobs_tenant_id ON index_jobs (tenant_id);
|
|
CREATE INDEX IF NOT EXISTS ix_index_jobs_tenant_doc ON index_jobs (tenant_id, doc_id);
|
|
CREATE INDEX IF NOT EXISTS ix_index_jobs_tenant_status ON index_jobs (tenant_id, status);
|
|
|
|
-- API Keys Indexes [AC-AISVC-50]
|
|
CREATE INDEX IF NOT EXISTS ix_api_keys_key ON api_keys (key);
|
|
CREATE INDEX IF NOT EXISTS ix_api_keys_is_active ON api_keys (is_active);
|
|
|
|
-- ============================================
|
|
-- Verification
|
|
-- ============================================
|
|
-- Run this to verify all tables are created:
|
|
-- SELECT tablename FROM pg_tables WHERE schemaname = 'public' ORDER BY tablename;
|