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 FROM information_schema.columns WHERE table_schema = '${schema}' AND table_name = '${tableName}' ORDER BY ordinal_position `); } async function main() { console.log('🔍 PKB、AIA、RVW 模块表结构\n'); console.log('=' .repeat(70)); // PKB 模块的表 console.log('\n📋 PKB 模块 (pkb_schema):\n'); const pkbTables = ['batch_results', 'batch_tasks', 'documents', 'knowledge_bases', 'task_templates']; for (const table of pkbTables) { console.log(`\n--- pkb_schema.${table} ---`); const cols = await getTableColumns('pkb_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' : ''}`)); } } // AIA 模块的表 console.log('\n\n📋 AIA 模块 (aia_schema):\n'); const aiaTables = ['conversations', 'general_conversations', 'general_messages', 'messages', 'projects']; for (const table of aiaTables) { console.log(`\n--- aia_schema.${table} ---`); const cols = await getTableColumns('aia_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' : ''}`)); } } // RVW 模块的表 console.log('\n\n📋 RVW 模块 (rvw_schema):\n'); const rvwTables = ['review_tasks']; for (const table of rvwTables) { console.log(`\n--- rvw_schema.${table} ---`); const cols = await getTableColumns('rvw_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' : ''}`)); } } console.log('\n' + '=' .repeat(70)); } main() .catch(console.error) .finally(() => prisma.$disconnect());