import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); async function getTableColumns(schema: string, tableName: string): Promise { return prisma.$queryRawUnsafe(` SELECT column_name, data_type, is_nullable, column_default FROM information_schema.columns WHERE table_schema = '${schema}' AND table_name = '${tableName}' ORDER BY ordinal_position `); } async function main() { console.log('🔍 DC 和 ASL 模块表结构对比\n'); console.log('=' .repeat(70)); // DC 模块的表 const dcTables = [ 'dc_extraction_items', 'dc_extraction_tasks', 'dc_health_checks', 'dc_templates', 'dc_tool_c_ai_history', 'dc_tool_c_sessions' ]; // ASL 模块的表 const aslTables = [ 'fulltext_screening_results', 'fulltext_screening_tasks', 'literatures', 'screening_projects', 'screening_results', 'screening_tasks' ]; console.log('\n📋 DC 模块 (dc_schema) 当前表结构:\n'); for (const table of dcTables) { console.log(`\n--- dc_schema.${table} ---`); try { const cols = await getTableColumns('dc_schema', table); if (cols.length === 0) { console.log(' ❌ 表不存在'); } else { cols.forEach((c: any) => { console.log(` ${c.column_name}: ${c.data_type} ${c.is_nullable === 'NO' ? 'NOT NULL' : ''}`); }); } } catch (e) { console.log(' ❌ 查询失败'); } } console.log('\n\n📋 ASL 模块 (asl_schema) 当前表结构:\n'); for (const table of aslTables) { console.log(`\n--- asl_schema.${table} ---`); try { const cols = await getTableColumns('asl_schema', table); if (cols.length === 0) { console.log(' ❌ 表不存在'); } else { cols.forEach((c: any) => { console.log(` ${c.column_name}: ${c.data_type} ${c.is_nullable === 'NO' ? 'NOT NULL' : ''}`); }); } } catch (e) { console.log(' ❌ 查询失败'); } } console.log('\n' + '=' .repeat(70)); } main() .catch(console.error) .finally(() => prisma.$disconnect());