Files
AIclinicalresearch/docs/09-架构实施/migration-scripts/README.md
HaHafeng e52020409c docs: complete documentation system (250+ files)
- System architecture and design documentation
- Business module docs (ASL/AIA/PKB/RVW/DC/SSA/ST)
- ASL module complete design (quality assurance, tech selection)
- Platform layer and common capabilities docs
- Development standards and API specifications
- Deployment and operations guides
- Project management and milestone tracking
- Architecture implementation reports
- Documentation templates and guides
2025-11-16 15:43:55 +08:00

326 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Schema迁移脚本使用指南
> **版本:** V1.0
> **创建日期:** 2025-11-09
> **迁移目标:** 从public schema迁移到10个隔离Schema
---
## 📋 脚本清单
| # | 脚本名称 | 说明 | 预计时间 | 前置依赖 |
|---|---------|------|---------|---------|
| 1 | `001-create-all-10-schemas.sql` | 创建10个Schema3详细+7空 | 5秒 | 无 |
| 2 | `002-migrate-platform.sql` | 迁移platform_schema1个表users | 15分钟 | 001 |
| 3 | `003-migrate-aia.sql` | 迁移aia_schema5个表对话相关 | 30分钟 | 001, 002 |
| 4 | `004-migrate-pkb.sql` | 迁移pkb_schema5个表知识库相关 | 30分钟 | 001, 002 |
| 5 | `005-validate-all.sql` | 全局验证和数据完整性检查 | 10分钟 | 001-004 |
**总计:** 约1.5小时
---
## 🚀 执行步骤
### 前置准备
1. **备份数据库(强烈建议)**
```bash
pg_dump -U postgres -d your_database > backup_$(date +%Y%m%d_%H%M%S).sql
```
2. **确认数据库连接**
```bash
# 确保DATABASE_URL环境变量正确
echo $DATABASE_URL
# 或查看 .env 文件
```
3. **确认当前表结构**
```sql
SELECT tablename FROM pg_tables WHERE schemaname = 'public';
```
---
### 执行迁移
#### 方法1使用psql命令推荐
```bash
# 进入脚本目录
cd AIclinicalresearch/docs/09-架构实施/migration-scripts
# 依次执行脚本
psql $DATABASE_URL -f 001-create-all-10-schemas.sql
psql $DATABASE_URL -f 002-migrate-platform.sql
psql $DATABASE_URL -f 003-migrate-aia.sql
psql $DATABASE_URL -f 004-migrate-pkb.sql
psql $DATABASE_URL -f 005-validate-all.sql
```
#### 方法2一次性执行所有脚本
```bash
# 创建执行脚本
cat 001-create-all-10-schemas.sql \
002-migrate-platform.sql \
003-migrate-aia.sql \
004-migrate-pkb.sql \
005-validate-all.sql \
| psql $DATABASE_URL
```
#### 方法3使用数据库客户端如DBeaver、pgAdmin
1. 打开数据库客户端
2. 连接到目标数据库
3. 依次打开并执行每个SQL文件
---
## ✅ 验证清单
### 执行001后
- [ ] 10个Schema全部创建成功
- [ ] 每个Schema都有注释说明
```sql
-- 验证SQL
SELECT nspname, pg_catalog.obj_description(oid, 'pg_namespace')
FROM pg_namespace
WHERE nspname LIKE '%_schema'
ORDER BY nspname;
```
### 执行002后
- [ ] platform_schema.users表创建成功
- [ ] 数据从public.users完整迁移
- [ ] 4个索引创建成功
```sql
-- 验证SQL
SELECT COUNT(*) AS public_count FROM public.users;
SELECT COUNT(*) AS platform_count FROM platform_schema.users;
```
### 执行003后
- [ ] aia_schema的5个表创建成功
- [ ] 数据完整迁移
- [ ] 外键约束正确建立
```sql
-- 验证SQL
SELECT COUNT(*) FROM aia_schema.projects;
SELECT COUNT(*) FROM aia_schema.conversations;
```
### 执行004后
- [ ] pkb_schema的5个表创建成功
- [ ] 包含Phase 2全文阅读字段
- [ ] 数据完整迁移
```sql
-- 验证SQL
SELECT COUNT(*) FROM pkb_schema.knowledge_bases;
SELECT COUNT(*) FROM pkb_schema.documents;
```
### 执行005后
- [ ] 所有数据量对比一致
- [ ] 跨Schema外键引用有效
- [ ] 无数据丢失
---
## 📊 迁移后数据分布
### Platform Schema
```
platform_schema
└── users (1表)
```
### AIA Schema
```
aia_schema
├── projects
├── conversations
├── messages
├── general_conversations
└── general_messages (5表)
```
### PKB Schema
```
pkb_schema
├── knowledge_bases
├── documents
├── batch_tasks
├── batch_results
└── task_templates (5表)
```
### 空Schema7个
```
asl_schema (AI智能文献 - Week 3设计)
common_schema (通用能力层)
dc_schema (数据清洗)
rvw_schema (审稿系统)
admin_schema (运营管理)
ssa_schema (智能统计分析)
st_schema (统计分析工具)
```
---
## ⚠️ 注意事项
### 1. 事务保护
所有迁移脚本都使用了事务BEGIN/COMMIT
- 成功:全部提交
- 失败:自动回滚,无部分迁移
### 2. 幂等性
所有脚本支持重复执行:
- 使用 `IF NOT EXISTS` 创建对象
- 使用 `ON CONFLICT DO NOTHING` 插入数据
### 3. public schema保留
迁移后**不会删除** public schema中的原表
- 原因:方便回滚和对比验证
- 清理:待所有验证通过后,再决定是否删除
### 4. 外键约束
支持跨Schema外键
- 所有业务表引用 `platform_schema.users(id)`
- PostgreSQL原生支持无需特殊配置
---
## 🔧 故障排查
### 问题1连接被拒绝
**错误:** `connection refused`
**解决:**
```bash
# 检查PostgreSQL服务
sudo systemctl status postgresql
# 启动服务
sudo systemctl start postgresql
```
### 问题2权限不足
**错误:** `permission denied to create schema`
**解决:**
```sql
-- 授予权限
GRANT CREATE ON DATABASE your_database TO your_user;
```
### 问题3外键约束失败
**错误:** `violates foreign key constraint`
**解决:**
- 确保先执行 002platform再执行 003/004aia/pkb
- 检查是否有孤立的user_id
### 问题4数据量不一致
**错误:** 验证脚本报告数据量不一致
**解决:**
1. 检查是否有迁移过程中新增的数据
2. 使用ID对比检查具体差异
```sql
-- 找出差异的ID
SELECT id FROM public.users
EXCEPT
SELECT id FROM platform_schema.users;
```
---
## 📝 回滚方案
### 快速回滚(推荐)
```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;
```
### 从备份恢复
```bash
# 恢复备份
psql $DATABASE_URL < backup_20251109_100000.sql
```
---
## 📂 后续步骤
迁移完成后,需要:
1. **更新Prisma配置** → 见任务9
- 更新 `backend/prisma/schema.prisma`
- 添加 `multiSchema` 预览特性
- 为3个Schema定义模型
2. **生成Prisma Client**
```bash
cd backend
npx prisma generate
```
3. **更新代码** → 见任务12
- 所有数据库查询使用新Schema
- 测试现有功能
4. **运行测试** → 见任务8
- 测试AI智能问答
- 测试知识库功能
---
## 📞 获取帮助
如果遇到问题:
1. **查看日志** - psql会输出详细的执行信息和错误
2. **检查文档** - 参考 `09-架构实施/01-Schema隔离架构设计10个.md`
3. **验证数据** - 运行 `005-validate-all.sql`
---
**创建人:** AI助手
**最后更新:** 2025-11-09
**版本:** V1.0
**核心理念:可重复执行 + 事务保护 + 完整验证 = 安全迁移** ⭐⭐⭐