qwen_agent/create_tables.sql
2026-02-10 18:59:10 +08:00

152 lines
6.1 KiB
SQL

-- 1. 创建 agent_user 表
CREATE TABLE IF NOT EXISTS agent_user (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
username VARCHAR(255) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE,
password_hash VARCHAR(255) NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
last_login TIMESTAMP WITH TIME ZONE,
is_active BOOLEAN DEFAULT TRUE,
is_admin BOOLEAN DEFAULT FALSE
);
-- agent_user 索引
CREATE INDEX IF NOT EXISTS idx_agent_user_username ON agent_user(username);
CREATE INDEX IF NOT EXISTS idx_agent_user_email ON agent_user(email);
CREATE INDEX IF NOT EXISTS idx_agent_user_is_active ON agent_user(is_active);
-- 2. 创建 agent_bots 表
CREATE TABLE IF NOT EXISTS agent_bots (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(255) NOT NULL,
bot_id VARCHAR(255) NOT NULL UNIQUE,
settings JSONB DEFAULT '{"language": "zh", "enable_memori": false, "enable_thinking": false, "tool_response": false}'::jsonb,
owner_id UUID NOT NULL REFERENCES agent_user(id) ON DELETE RESTRICT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- agent_bots 索引
CREATE INDEX IF NOT EXISTS idx_agent_bots_bot_id ON agent_bots(bot_id);
CREATE INDEX IF NOT EXISTS idx_agent_bots_owner_id ON agent_bots(owner_id);
-- 3. 创建 agent_user_tokens 表
CREATE TABLE IF NOT EXISTS agent_user_tokens (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES agent_user(id) ON DELETE CASCADE,
token VARCHAR(255) NOT NULL UNIQUE,
expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- agent_user_tokens 索引
CREATE INDEX IF NOT EXISTS idx_agent_user_tokens_token ON agent_user_tokens(token);
CREATE INDEX IF NOT EXISTS idx_agent_user_tokens_user_id ON agent_user_tokens(user_id);
CREATE INDEX IF NOT EXISTS idx_agent_user_tokens_expires ON agent_user_tokens(expires_at);
-- 4. 创建 agent_admin_tokens 表
CREATE TABLE IF NOT EXISTS agent_admin_tokens (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
username VARCHAR(255) NOT NULL,
token VARCHAR(255) NOT NULL UNIQUE,
expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- agent_admin_tokens 索引
CREATE INDEX IF NOT EXISTS idx_agent_admin_tokens_token ON agent_admin_tokens(token);
CREATE INDEX IF NOT EXISTS idx_agent_admin_tokens_expires ON agent_admin_tokens(expires_at);
-- 5. 创建 agent_models 表
CREATE TABLE IF NOT EXISTS agent_models (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(255) NOT NULL,
provider VARCHAR(100) NOT NULL,
model VARCHAR(255) NOT NULL,
server VARCHAR(500),
api_key VARCHAR(500),
is_default BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- agent_models 索引
CREATE INDEX IF NOT EXISTS idx_agent_models_is_default ON agent_models(is_default);
-- 6. 创建 agent_mcp_servers 表
CREATE TABLE IF NOT EXISTS agent_mcp_servers (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
bot_id UUID REFERENCES agent_bots(id) ON DELETE CASCADE,
name VARCHAR(255) NOT NULL,
type VARCHAR(50) NOT NULL,
config JSONB NOT NULL,
enabled BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- agent_mcp_servers 索引
CREATE INDEX IF NOT EXISTS idx_agent_mcp_servers_bot_id ON agent_mcp_servers(bot_id);
CREATE INDEX IF NOT EXISTS idx_agent_mcp_servers_enabled ON agent_mcp_servers(enabled);
-- 7. 创建 agent_chat_sessions 表
CREATE TABLE IF NOT EXISTS agent_chat_sessions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
bot_id UUID REFERENCES agent_bots(id) ON DELETE CASCADE,
title VARCHAR(500),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- agent_chat_sessions 索引
CREATE INDEX IF NOT EXISTS idx_agent_chat_sessions_bot_id ON agent_chat_sessions(bot_id);
CREATE INDEX IF NOT EXISTS idx_agent_chat_sessions_created ON agent_chat_sessions(created_at DESC);
-- 8. 创建 bot_shares 表
CREATE TABLE IF NOT EXISTS bot_shares (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
bot_id UUID NOT NULL REFERENCES agent_bots(id) ON DELETE CASCADE,
user_id UUID NOT NULL REFERENCES agent_user(id) ON DELETE CASCADE,
shared_by UUID NOT NULL REFERENCES agent_user(id) ON DELETE SET NULL,
role VARCHAR(50) DEFAULT 'viewer' CHECK (role IN ('viewer', 'editor')),
shared_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
expires_at TIMESTAMP WITH TIME ZONE,
UNIQUE(bot_id, user_id)
);
-- bot_shares 索引
CREATE INDEX IF NOT EXISTS idx_bot_shares_bot_id ON bot_shares(bot_id);
CREATE INDEX IF NOT EXISTS idx_bot_shares_user_id ON bot_shares(user_id);
CREATE INDEX IF NOT EXISTS idx_bot_shares_shared_by ON bot_shares(shared_by);
-- 9. 创建 user_datasets 表(用户与 RAGFlow 数据集的关联表)
CREATE TABLE IF NOT EXISTS user_datasets (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES agent_user(id) ON DELETE CASCADE,
dataset_id VARCHAR(255) NOT NULL, -- RAGFlow 返回的 dataset_id
dataset_name VARCHAR(255), -- 冗余存储数据集名称,方便查询
owner BOOLEAN DEFAULT TRUE, -- 是否为所有者(预留分享功能)
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
UNIQUE(user_id, dataset_id)
);
-- user_datasets 索引
CREATE INDEX IF NOT EXISTS idx_user_datasets_user_id ON user_datasets(user_id);
CREATE INDEX IF NOT EXISTS idx_user_datasets_dataset_id ON user_datasets(dataset_id);
-- ===========================
-- 默认 Admin 账号
-- 用户名: admin
-- 密码: admin123
-- ===========================
INSERT INTO agent_user (id, username, email, password_hash, is_active, is_admin)
VALUES (
'00000000-0000-0000-0000-000000000001',
'admin',
'admin@local',
'240be518fabd2724ddb6f04eeb1da5967448d7e831c08c8fa822809f74c720a9',
TRUE,
TRUE
) ON CONFLICT (username) DO NOTHING;