feat(db): 增加共享知识库与隔离系统数据库初始化脚本

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
WeiCHEN
2026-09-13 02:50:18 +00:00
committed by weichen
co-authored by Cursor
parent ee18e5436e
commit 203297056d
2 changed files with 106 additions and 0 deletions
+72
View File
@@ -0,0 +1,72 @@
-- 各环境专属系统数据库 (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);