Files
AIclinicalresearch/backend/database-validation.sql
HaHafeng 3634933ece refactor(asl): ASL frontend architecture refactoring with left navigation
- feat: Create ASLLayout component with 7-module left navigation
- feat: Implement Title Screening Settings page with optimized PICOS layout
- feat: Add placeholder pages for Workbench and Results
- fix: Fix nested routing structure for React Router v6
- fix: Resolve Spin component warning in MainLayout
- fix: Add QueryClientProvider to App.tsx
- style: Optimize PICOS form layout (P+I left, C+O+S right)
- style: Align Inclusion/Exclusion criteria side-by-side
- docs: Add architecture refactoring and routing fix reports

Ref: Week 2 Frontend Development
Scope: ASL module MVP - Title Abstract Screening
2025-11-18 21:51:51 +08:00

331 lines
8.8 KiB
SQL
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
-- ========================================
-- 数据库迁移验证脚本
-- 全面检查10个Schema和数据完整性
-- ========================================
\echo ''
\echo '========================================'
\echo '📊 数据库迁移验证报告'
\echo '========================================'
\echo ''
-- ========================================
-- 1. Schema检查
-- ========================================
\echo '1⃣ Schema检查'
\echo '----------------------------------------'
SELECT
schema_name,
pg_catalog.obj_description(oid, 'pg_namespace') AS description,
(SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = s.schema_name) as table_count
FROM pg_namespace s
WHERE schema_name IN (
'platform_schema', 'aia_schema', 'pkb_schema',
'asl_schema', 'common_schema', 'dc_schema',
'rvw_schema', 'admin_schema', 'ssa_schema', 'st_schema'
)
ORDER BY schema_name;
\echo ''
-- ========================================
-- 2. 详细表清单
-- ========================================
\echo '2⃣ 详细表清单'
\echo '----------------------------------------'
-- Platform Schema
\echo '【Platform Schema】'
SELECT
schemaname,
tablename,
(SELECT COUNT(*) FROM pg_indexes WHERE schemaname = t.schemaname AND tablename = t.tablename) as index_count
FROM pg_tables t
WHERE schemaname = 'platform_schema'
ORDER BY tablename;
\echo ''
-- AIA Schema
\echo '【AIA Schema】'
SELECT
schemaname,
tablename,
(SELECT COUNT(*) FROM pg_indexes WHERE schemaname = t.schemaname AND tablename = t.tablename) as index_count
FROM pg_tables t
WHERE schemaname = 'aia_schema'
ORDER BY tablename;
\echo ''
-- PKB Schema
\echo '【PKB Schema】'
SELECT
schemaname,
tablename,
(SELECT COUNT(*) FROM pg_indexes WHERE schemaname = t.schemaname AND tablename = t.tablename) as index_count
FROM pg_tables t
WHERE schemaname = 'pkb_schema'
ORDER BY tablename;
\echo ''
-- ========================================
-- 3. 数据量统计
-- ========================================
\echo '3⃣ 数据量统计'
\echo '----------------------------------------'
-- Platform Schema
\echo '【Platform Schema】'
SELECT 'users' AS table_name, COUNT(*) AS row_count FROM platform_schema.users;
\echo ''
-- AIA Schema
\echo '【AIA Schema】'
SELECT 'projects' AS table_name, COUNT(*) AS row_count FROM aia_schema.projects
UNION ALL
SELECT 'conversations', COUNT(*) FROM aia_schema.conversations
UNION ALL
SELECT 'messages', COUNT(*) FROM aia_schema.messages
UNION ALL
SELECT 'general_conversations', COUNT(*) FROM aia_schema.general_conversations
UNION ALL
SELECT 'general_messages', COUNT(*) FROM aia_schema.general_messages;
\echo ''
-- PKB Schema
\echo '【PKB Schema】'
SELECT 'knowledge_bases' AS table_name, COUNT(*) AS row_count FROM pkb_schema.knowledge_bases
UNION ALL
SELECT 'documents', COUNT(*) FROM pkb_schema.documents
UNION ALL
SELECT 'batch_tasks', COUNT(*) FROM pkb_schema.batch_tasks
UNION ALL
SELECT 'batch_results', COUNT(*) FROM pkb_schema.batch_results
UNION ALL
SELECT 'task_templates', COUNT(*) FROM pkb_schema.task_templates;
\echo ''
-- ========================================
-- 4. 数据完整性对比新Schema vs public
-- ========================================
\echo '4⃣ 数据完整性对比'
\echo '----------------------------------------'
SELECT
'users' AS table_name,
(SELECT COUNT(*) FROM public.users) AS public_count,
(SELECT COUNT(*) FROM platform_schema.users) AS new_schema_count,
CASE
WHEN (SELECT COUNT(*) FROM public.users) = (SELECT COUNT(*) FROM platform_schema.users)
THEN '✅ 一致'
ELSE '❌ 不一致'
END AS status
UNION ALL
SELECT
'projects',
(SELECT COUNT(*) FROM public.projects),
(SELECT COUNT(*) FROM aia_schema.projects),
CASE
WHEN (SELECT COUNT(*) FROM public.projects) = (SELECT COUNT(*) FROM aia_schema.projects)
THEN '✅ 一致'
ELSE '❌ 不一致'
END
UNION ALL
SELECT
'conversations',
(SELECT COUNT(*) FROM public.conversations),
(SELECT COUNT(*) FROM aia_schema.conversations),
CASE
WHEN (SELECT COUNT(*) FROM public.conversations) = (SELECT COUNT(*) FROM aia_schema.conversations)
THEN '✅ 一致'
ELSE '❌ 不一致'
END
UNION ALL
SELECT
'messages',
(SELECT COUNT(*) FROM public.messages),
(SELECT COUNT(*) FROM aia_schema.messages),
CASE
WHEN (SELECT COUNT(*) FROM public.messages) = (SELECT COUNT(*) FROM aia_schema.messages)
THEN '✅ 一致'
ELSE '❌ 不一致'
END
UNION ALL
SELECT
'knowledge_bases',
(SELECT COUNT(*) FROM public.knowledge_bases),
(SELECT COUNT(*) FROM pkb_schema.knowledge_bases),
CASE
WHEN (SELECT COUNT(*) FROM public.knowledge_bases) = (SELECT COUNT(*) FROM pkb_schema.knowledge_bases)
THEN '✅ 一致'
ELSE '❌ 不一致'
END
UNION ALL
SELECT
'documents',
(SELECT COUNT(*) FROM public.documents),
(SELECT COUNT(*) FROM pkb_schema.documents),
CASE
WHEN (SELECT COUNT(*) FROM public.documents) = (SELECT COUNT(*) FROM pkb_schema.documents)
THEN '✅ 一致'
ELSE '❌ 不一致'
END;
\echo ''
-- ========================================
-- 5. 外键约束检查
-- ========================================
\echo '5⃣ 外键约束检查'
\echo '----------------------------------------'
SELECT
tc.table_schema AS schema_name,
tc.table_name,
tc.constraint_name,
kcu.column_name,
ccu.table_schema AS ref_schema,
ccu.table_name AS ref_table,
ccu.column_name AS ref_column
FROM information_schema.table_constraints tc
JOIN information_schema.key_column_usage kcu
ON tc.constraint_name = kcu.constraint_name
AND tc.table_schema = kcu.table_schema
JOIN information_schema.constraint_column_usage ccu
ON ccu.constraint_name = tc.constraint_name
AND ccu.table_schema = tc.table_schema
WHERE tc.constraint_type = 'FOREIGN KEY'
AND tc.table_schema IN ('platform_schema', 'aia_schema', 'pkb_schema')
ORDER BY tc.table_schema, tc.table_name;
\echo ''
-- ========================================
-- 6. 索引统计
-- ========================================
\echo '6⃣ 索引统计'
\echo '----------------------------------------'
SELECT
schemaname,
COUNT(*) as index_count
FROM pg_indexes
WHERE schemaname IN ('platform_schema', 'aia_schema', 'pkb_schema')
GROUP BY schemaname
ORDER BY schemaname;
\echo ''
-- ========================================
-- 7. 数据采样前3条记录
-- ========================================
\echo '7⃣ 数据采样验证'
\echo '----------------------------------------'
\echo '【platform_schema.users】'
SELECT id, email, name, role, created_at
FROM platform_schema.users
ORDER BY created_at DESC
LIMIT 3;
\echo ''
\echo '【aia_schema.projects】'
SELECT id, name, research_type, conversation_count, created_at
FROM aia_schema.projects
ORDER BY created_at DESC
LIMIT 3;
\echo ''
\echo '【pkb_schema.knowledge_bases】'
SELECT id, name, file_count, created_at
FROM pkb_schema.knowledge_bases
ORDER BY created_at DESC
LIMIT 3;
\echo ''
-- ========================================
-- 8. 跨Schema引用验证
-- ========================================
\echo '8⃣ 跨Schema引用完整性'
\echo '----------------------------------------'
-- 检查aia_schema.projects的user_id是否都存在
SELECT
'aia_schema.projects → platform_schema.users' AS reference,
COUNT(*) AS total_records,
COUNT(u.id) AS valid_references,
COUNT(*) - COUNT(u.id) AS invalid_count,
CASE
WHEN COUNT(*) = COUNT(u.id) THEN '✅ 全部有效'
ELSE '❌ 存在无效引用'
END AS status
FROM aia_schema.projects p
LEFT JOIN platform_schema.users u ON p.user_id = u.id
UNION ALL
-- 检查pkb_schema.knowledge_bases的user_id
SELECT
'pkb_schema.knowledge_bases → platform_schema.users',
COUNT(*),
COUNT(u.id),
COUNT(*) - COUNT(u.id),
CASE
WHEN COUNT(*) = COUNT(u.id) THEN '✅ 全部有效'
ELSE '❌ 存在无效引用'
END
FROM pkb_schema.knowledge_bases kb
LEFT JOIN platform_schema.users u ON kb.user_id = u.id
UNION ALL
-- 检查aia_schema.conversations → aia_schema.projects
SELECT
'aia_schema.conversations → aia_schema.projects',
COUNT(*),
COUNT(p.id),
COUNT(*) - COUNT(p.id),
CASE
WHEN COUNT(*) = COUNT(p.id) OR COUNT(*) = 0 THEN '✅ 全部有效'
ELSE '❌ 存在无效引用'
END
FROM aia_schema.conversations c
LEFT JOIN aia_schema.projects p ON c.project_id = p.id
WHERE c.project_id IS NOT NULL;
\echo ''
-- ========================================
-- 9. 最终总结
-- ========================================
\echo '========================================'
\echo '✅ 验证完成!'
\echo '========================================'
\echo ''