# 数据库连接配置 > **文档版本:** v1.0 > **创建日期:** 2025-11-09 > **维护者:** 架构团队 > **最后更新:** 2025-11-09 --- ## 📋 文档说明 本文档记录Schema隔离架构实施相关的数据库连接和配置信息,包括: - 当前数据库状态 - Schema隔离迁移配置 - 迁移过程的连接方式 - 验证和回滚方案 --- ## 🗄️ 当前数据库状态 ### 数据库基本信息 **连接信息:** ``` 数据库类型:PostgreSQL 15+ 数据库名称:ai_clinical_research 主机地址: localhost 端口: 5432 用户名: postgres 密码: postgres ``` **完整连接字符串:** ``` DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ai_clinical_research ``` --- ### 当前Schema结构 **现有Schema:** - ✅ **public** - 所有13个表都在这里 **表清单(13个):** #### 1. 平台基础(2个表) ```sql public.users -- 用户表 public.admin_logs -- 管理日志 ``` #### 2. AI智能问答(5个表) ```sql public.projects -- 项目管理 public.conversations -- 项目对话 public.messages -- 对话消息 public.general_conversations -- 通用对话 public.general_messages -- 通用消息 ``` #### 3. 个人知识库(2个表) ```sql public.knowledge_bases -- 知识库 public.documents -- 文档 ``` #### 4. 批处理系统(3个表) ```sql public.batch_tasks -- 批处理任务 public.batch_results -- 批处理结果 public.task_templates -- 任务模板 ``` #### 5. 稿件审查(1个表) ```sql public.review_tasks -- 审查任务 ``` --- ### 数据库统计信息 **表数量:** 13个 **索引数量:** 约40个 **外键约束:** 约15个 **当前数据量(估算):** - users: ~10条 - projects: ~20条 - conversations: ~50条 - messages: ~500条 - knowledge_bases: ~5条 - documents: ~30条 - 其他表:测试数据 **总数据量:** < 10MB(测试环境) --- ## 🎯 Schema隔离目标架构 ### 10个独立Schema #### 需要详细设计+数据迁移(5个) **1. platform_schema(平台基础层)** ```sql -- 迁移表: public.users → platform_schema.users public.admin_logs → platform_schema.admin_logs (暂缓,待确认) ``` **2. common_schema(通用能力层)** ```sql -- 新建表: common_schema.llm_usage -- LLM使用记录 common_schema.feature_flags -- Feature Flags ``` **3. asl_schema(AI智能文献)** ```sql -- 新建表: asl_schema.literature_projects -- 文献项目 asl_schema.pico_configs -- PICO配置 asl_schema.literature_items -- 文献条目 -- 更多表见ASL设计文档 ``` **4. aia_schema(AI智能问答)** ```sql -- 迁移表: public.projects → aia_schema.projects public.conversations → aia_schema.conversations public.messages → aia_schema.messages public.general_conversations → aia_schema.general_conversations public.general_messages → aia_schema.general_messages ``` **5. pkb_schema(个人知识库)** ```sql -- 迁移表: public.knowledge_bases → pkb_schema.knowledge_bases public.documents → pkb_schema.documents ``` #### 只创建空Schema(5个) **6. dc_schema(数据清洗)** - 暂无表结构 **7. rvw_schema(审稿系统)** - 暂无表结构 **8. admin_schema(运营管理)** - 暂无表结构 **9. ssa_schema(智能统计分析)** - 暂无表结构 **10. st_schema(统计分析工具)** - 暂无表结构 --- ## 🔄 迁移过程连接配置 ### 迁移前准备 **1. 备份当前数据库** ```bash # Windows PowerShell cd D:\MyCursor\AIclinicalresearch\backend # 使用pg_dump备份 pg_dump -h localhost -U postgres -d ai_clinical_research -F c -f backup_before_schema_migration_$(Get-Date -Format 'yyyyMMdd_HHmmss').dump # 或者使用SQL格式 pg_dump -h localhost -U postgres -d ai_clinical_research > backup_before_schema_migration_$(Get-Date -Format 'yyyyMMdd_HHmmss').sql ``` **2. 验证备份** ```bash # 检查备份文件大小 ls -lh backup_*.dump # 验证备份内容(SQL格式) head -n 50 backup_*.sql ``` --- ### 迁移过程连接方式 #### 方式1:使用Prisma Migrate(推荐) **连接配置:** ```env # backend/.env DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ai_clinical_research ``` **执行迁移:** ```bash cd backend # 创建新的迁移 npx prisma migrate dev --name schema_isolation_10_schemas # 查看迁移状态 npx prisma migrate status ``` --- #### 方式2:直接执行SQL脚本 **连接方式:** ```bash # 使用psql连接 psql -h localhost -U postgres -d ai_clinical_research # 或使用环境变量 export PGPASSWORD=postgres psql -h localhost -U postgres -d ai_clinical_research -f migration_script.sql ``` **执行迁移脚本:** ```bash cd docs/09-架构实施/migration-scripts # 按顺序执行 psql -h localhost -U postgres -d ai_clinical_research -f 001-create-all-10-schemas.sql psql -h localhost -U postgres -d ai_clinical_research -f 002-migrate-platform.sql psql -h localhost -U postgres -d ai_clinical_research -f 003-migrate-aia.sql psql -h localhost -U postgres -d ai_clinical_research -f 004-migrate-pkb.sql # ... 更多脚本 ``` --- #### 方式3:使用可视化工具 **pgAdmin 4:** 1. 连接信息: - 主机:localhost - 端口:5432 - 数据库:ai_clinical_research - 用户:postgres - 密码:postgres 2. 执行迁移: - 打开Query Tool - 加载SQL脚本 - 执行 **DataGrip / DBeaver:** - 同样的连接信息 - 支持事务管理 - 方便回滚 --- ## ✅ 迁移验证 ### 1. 检查Schema创建 **SQL验证:** ```sql -- 查看所有Schema SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('pg_catalog', 'information_schema') ORDER BY schema_name; -- 预期结果: -- admin_schema -- aia_schema -- asl_schema -- common_schema -- dc_schema -- pkb_schema -- platform_schema -- public -- rvw_schema -- ssa_schema -- st_schema ``` --- ### 2. 检查表迁移 **验证platform_schema:** ```sql -- 查看表 SELECT table_name FROM information_schema.tables WHERE table_schema = 'platform_schema'; -- 验证数据 SELECT COUNT(*) FROM platform_schema.users; -- 预期:与原public.users的数量一致 ``` **验证aia_schema:** ```sql -- 查看所有表 SELECT table_name FROM information_schema.tables WHERE table_schema = 'aia_schema'; -- 验证数据完整性 SELECT COUNT(*) FROM aia_schema.projects; SELECT COUNT(*) FROM aia_schema.conversations; SELECT COUNT(*) FROM aia_schema.messages; ``` **验证pkb_schema:** ```sql SELECT COUNT(*) FROM pkb_schema.knowledge_bases; SELECT COUNT(*) FROM pkb_schema.documents; ``` --- ### 3. 验证外键关系 **检查跨Schema外键:** ```sql -- 查看所有外键约束 SELECT tc.table_schema, tc.table_name, kcu.column_name, ccu.table_schema AS foreign_table_schema, ccu.table_name AS foreign_table_name, ccu.column_name AS foreign_column_name FROM information_schema.table_constraints AS tc JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema IN ('platform_schema', 'aia_schema', 'pkb_schema', 'asl_schema', 'common_schema') ORDER BY tc.table_schema, tc.table_name; ``` --- ### 4. 验证索引 **检查索引是否正确迁移:** ```sql -- 查看某个Schema的所有索引 SELECT schemaname, tablename, indexname, indexdef FROM pg_indexes WHERE schemaname = 'aia_schema' ORDER BY tablename, indexname; ``` --- ### 5. Prisma验证 **更新Prisma配置后验证:** ```bash cd backend # 生成Prisma Client npx prisma generate # 验证Prisma Client可用 npx ts-node -e "import { PrismaClient } from '@prisma/client'; const p = new PrismaClient(); p.user.count().then(console.log)" ``` --- ## 🔙 回滚方案 ### 场景1:迁移过程中发现问题 **立即回滚:** ```bash # 如果使用Prisma Migrate npx prisma migrate reset # 恢复备份 psql -h localhost -U postgres -d ai_clinical_research < backup_before_schema_migration_YYYYMMDD_HHMMSS.sql ``` --- ### 场景2:迁移完成后发现问题 **方案A:从备份恢复(推荐)** ```bash # 1. 删除当前数据库 dropdb -h localhost -U postgres ai_clinical_research # 2. 重新创建 createdb -h localhost -U postgres ai_clinical_research # 3. 恢复备份 pg_restore -h localhost -U postgres -d ai_clinical_research backup_before_schema_migration_YYYYMMDD_HHMMSS.dump ``` **方案B:手动删除新Schema,保留public** ```sql -- 删除新建的Schema(慎重!) DROP SCHEMA IF EXISTS platform_schema CASCADE; DROP SCHEMA IF EXISTS aia_schema CASCADE; DROP SCHEMA IF EXISTS pkb_schema CASCADE; DROP SCHEMA IF EXISTS asl_schema CASCADE; DROP SCHEMA IF EXISTS common_schema CASCADE; DROP SCHEMA IF EXISTS dc_schema CASCADE; DROP SCHEMA IF EXISTS rvw_schema CASCADE; DROP SCHEMA IF EXISTS admin_schema CASCADE; DROP SCHEMA IF EXISTS ssa_schema CASCADE; DROP SCHEMA IF EXISTS st_schema CASCADE; -- public schema的表如果被删除了,从备份恢复 ``` --- ## 📊 迁移检查清单 ### 迁移前检查 - [ ] ✅ 数据库已备份(backup_before_schema_migration_*.dump) - [ ] ✅ 备份文件已验证 - [ ] ✅ Prisma配置已更新(datasource.schemas) - [ ] ✅ 迁移脚本已准备(001-010.sql) - [ ] ✅ 测试环境已验证迁移步骤 --- ### 迁移中检查 - [ ] ✅ 10个Schema创建成功 - [ ] ✅ 表迁移无错误(5个有数据的Schema) - [ ] ✅ 数据完整性验证通过 - [ ] ✅ 外键约束正确 - [ ] ✅ 索引正确创建 --- ### 迁移后检查 - [ ] ✅ Prisma Client生成成功 - [ ] ✅ 后端服务启动正常 - [ ] ✅ 现有功能测试通过(AIA、PKB) - [ ] ✅ API调用正常 - [ ] ✅ 前端功能正常 --- ## 🔧 常见问题 ### 问题1:Schema创建失败 **错误:** ``` ERROR: schema "platform_schema" already exists ``` **解决:** ```sql -- 检查Schema是否存在 SELECT schema_name FROM information_schema.schemata WHERE schema_name = 'platform_schema'; -- 如果存在但为空,可删除重建 DROP SCHEMA platform_schema CASCADE; CREATE SCHEMA platform_schema; ``` --- ### 问题2:数据迁移失败 **错误:** ``` ERROR: duplicate key value violates unique constraint ``` **解决:** 1. 检查数据是否已部分迁移 2. 清理目标Schema 3. 重新执行迁移 --- ### 问题3:外键约束错误 **错误:** ``` ERROR: foreign key constraint "fk_user_id" cannot be implemented ``` **解决:** 1. 确保被引用的表已先迁移 2. 检查外键字段类型匹配 3. 考虑先禁用外键,迁移后重建 --- ## 📚 相关文档 - [环境配置指南](../07-运维文档/01-环境配置指南.md) - [Schema隔离架构设计](../00-系统总体设计/03-数据库架构说明.md) - [下一阶段行动计划](../08-项目管理/下一阶段行动计划-V2.1-务实版.md) --- ## 🔄 更新记录 | 日期 | 更新内容 | 更新人 | |------|---------|--------| | 2025-11-09 | 初始文档创建 | 架构团队 | | - | 待记录 | - | --- **文档版本:** v1.0 **最后更新:** 2025-11-09 **维护者:** 架构团队