-- 各环境专属系统数据库 (System App DB) 初始化脚本 -- 注意:对话记录、系统用户、执行任务状态等在各环境之间严格物理/逻辑隔离 CREATE TABLE IF NOT EXISTS schema_migrations ( version INTEGER PRIMARY KEY, applied_at TIMESTAMPTZ NOT NULL DEFAULT now() ); -- 系统租户/项目 CREATE TABLE IF NOT EXISTS projects ( id BIGSERIAL PRIMARY KEY, name TEXT NOT NULL, code TEXT NOT NULL UNIQUE, environment TEXT NOT NULL DEFAULT 'dev', status TEXT NOT NULL DEFAULT 'active', created_at TIMESTAMPTZ NOT NULL DEFAULT now(), updated_at TIMESTAMPTZ NOT NULL DEFAULT now() ); -- 用户表 (隔离) CREATE TABLE IF NOT EXISTS users ( id BIGSERIAL PRIMARY KEY, account_id TEXT NOT NULL UNIQUE, name TEXT NOT NULL DEFAULT '', role TEXT NOT NULL DEFAULT 'user', created_at TIMESTAMPTZ NOT NULL DEFAULT now() ); -- 对话会话表 (隔离:各环境不得共享) CREATE TABLE IF NOT EXISTS chat_sessions ( id BIGSERIAL PRIMARY KEY, session_id TEXT NOT NULL UNIQUE, project_id BIGINT REFERENCES projects(id) ON DELETE CASCADE, user_id BIGINT REFERENCES users(id), title TEXT NOT NULL DEFAULT '新对话', model TEXT NOT NULL DEFAULT '', status TEXT NOT NULL DEFAULT 'active', created_at TIMESTAMPTZ NOT NULL DEFAULT now(), updated_at TIMESTAMPTZ NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS idx_chat_sessions_uid ON chat_sessions(user_id); CREATE INDEX IF NOT EXISTS idx_chat_sessions_pid ON chat_sessions(project_id); -- 对话消息与历史流 (隔离:各环境不得共享) CREATE TABLE IF NOT EXISTS chat_messages ( id BIGSERIAL PRIMARY KEY, session_id TEXT NOT NULL REFERENCES chat_sessions(session_id) ON DELETE CASCADE, role TEXT NOT NULL, -- user / assistant / system / tool content TEXT NOT NULL, tool_calls JSONB, tokens INT NOT NULL DEFAULT 0, created_at TIMESTAMPTZ NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS idx_chat_messages_sid ON chat_messages(session_id); -- 智能体异步执行任务与审计日志 (隔离) CREATE TABLE IF NOT EXISTS agent_tasks ( id BIGSERIAL PRIMARY KEY, task_id TEXT NOT NULL UNIQUE, session_id TEXT REFERENCES chat_sessions(session_id), status TEXT NOT NULL DEFAULT 'pending', -- pending, running, completed, failed plan_steps JSONB NOT NULL DEFAULT '[]'::jsonb, result_summary TEXT NOT NULL DEFAULT '', error_message TEXT NOT NULL DEFAULT '', started_at TIMESTAMPTZ, finished_at TIMESTAMPTZ, created_at TIMESTAMPTZ NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS idx_agent_tasks_status ON agent_tasks(status);