diff --git a/RuoYi-Vue/sql/train/v2/000_preflight.sql b/RuoYi-Vue/sql/train/v2/000_preflight.sql index 5d7c180b6..b60b8504e 100644 --- a/RuoYi-Vue/sql/train/v2/000_preflight.sql +++ b/RuoYi-Vue/sql/train/v2/000_preflight.sql @@ -126,6 +126,7 @@ BEGIN SELECT count(*) INTO v_cnt FROM train_student_portrait; IF v_cnt <> 0 THEN RAISE EXCEPTION '>>> [Preflight-FATAL] train_student_portrait 非空,包含 % 行', v_cnt; END IF; + -- ========================================================================== -- ========================================================================== -- 5. 14 个 Phase 0.5 旧业务主键 (PK) 精确骨架校验 -- ========================================================================== @@ -133,20 +134,20 @@ BEGIN FOR r IN ( WITH expected_pk(table_name, constraint_name, column_name) AS ( VALUES - ('train_teacher', 'pk_train_teacher', 't_id'), - ('train_student', 'pk_train_student', 's_id'), - ('train_course', 'pk_train_course', 'c_id'), - ('train_class_plan', 'pk_train_class_plan', 'plan_id'), - ('train_dormitory_info', 'pk_train_dormitory_info', 'dorm_id'), - ('train_dorm_auth', 'pk_train_dorm_auth', 'auth_id'), - ('train_classroom_info', 'pk_train_classroom_info', 'class_room_id'), - ('train_training_site', 'pk_train_training_site', 'site_id'), - ('train_class_report', 'pk_train_class_report', 'report_id'), - ('train_electronic_board', 'pk_train_electronic_board', 'board_id'), - ('train_student_checkin', 'pk_train_student_checkin', 'checkin_id'), - ('train_score_info', 'pk_train_score_info', 'score_id'), - ('train_study_duration', 'pk_train_study_duration', 'dur_id'), - ('train_student_portrait', 'pk_train_student_portrait', 'portrait_id') + ('train_class_plan', 'train_class_plan_pkey', 'plan_id'), + ('train_class_report', 'train_class_report_pkey', 'report_id'), + ('train_classroom_info', 'train_classroom_info_pkey', 'class_room_id'), + ('train_course', 'train_course_pkey', 'c_id'), + ('train_dorm_auth', 'train_dorm_auth_pkey', 'auth_id'), + ('train_dormitory_info', 'train_dormitory_info_pkey', 'dorm_id'), + ('train_electronic_board', 'train_electronic_board_pkey', 'board_id'), + ('train_score_info', 'train_score_info_pkey', 'score_id'), + ('train_student', 'train_student_pkey', 's_id'), + ('train_student_checkin', 'train_student_checkin_pkey', 'checkin_id'), + ('train_student_portrait', 'train_student_portrait_pkey', 'portrait_id'), + ('train_study_duration', 'train_study_duration_pkey', 'dur_id'), + ('train_teacher', 'train_teacher_pkey', 't_id'), + ('train_training_site', 'train_training_site_pkey', 'site_id') ), actual_pk AS ( SELECT tc.table_name, tc.constraint_name, kcu.column_name @@ -183,23 +184,25 @@ BEGIN FOR r IN ( WITH expected_identity(table_name, column_name) AS ( VALUES - ('train_dorm_auth', 'auth_id'), ('train_class_report', 'report_id'), - ('train_student_checkin', 'checkin_id'), + ('train_dorm_auth', 'auth_id'), ('train_score_info', 'score_id'), - ('train_study_duration', 'dur_id'), - ('train_student_portrait', 'portrait_id') + ('train_student_checkin', 'checkin_id'), + ('train_student_portrait', 'portrait_id'), + ('train_study_duration', 'dur_id') ), actual_identity AS ( - SELECT table_name, column_name - FROM information_schema.columns - WHERE table_schema = 'public' - AND table_name LIKE 'train_%' - AND is_identity = 'YES' + SELECT c.relname AS table_name, a.attname AS column_name + FROM sys_class c + JOIN sys_attribute a ON a.attrelid = c.oid + JOIN sys_namespace n ON n.oid = c.relnamespace + WHERE n.nspname = 'public' + AND c.relname LIKE 'train_%' + AND a.attidentity = 'd' ) SELECT 'MISSING_IDENTITY' AS diff_type, e.table_name, e.column_name FROM expected_identity e - LEFT JOIN actual_identity a + LEFT JOIN actual_identity a ON e.table_name = a.table_name AND e.column_name = a.column_name WHERE a.table_name IS NULL UNION ALL @@ -223,13 +226,13 @@ BEGIN FOR r IN ( WITH expected_unique(table_name, constraint_name, column_list) AS ( VALUES - ('train_dormitory_info', 'uq_dorm_building_room', 'dorm_building, dorm_room'), - ('train_dorm_auth', 'uq_dormauth_stu_plan', 'student_id, plan_id'), - ('train_class_report', 'uq_classreport_plan_stu', 'plan_id, student_id'), - ('train_electronic_board', 'uq_board_sn', 'board_sn'), - ('train_student_checkin', 'uq_checkin_lesson_stu', 'plan_id, c_id, student_id, lesson_start_time'), - ('train_score_info', 'uq_scoreinfo_plan_c_stu', 'plan_id, c_id, student_id'), - ('train_student_portrait', 'uq_portrait_stu_plan', 'student_id, plan_id') + ('train_class_report', 'uk_plan_stu_report', 'plan_id, student_id'), + ('train_dorm_auth', 'uk_student_plan_dormauth', 'student_id, plan_id'), + ('train_dormitory_info', 'uk_dorm_build_room', 'dorm_building, dorm_room'), + ('train_electronic_board', 'uk_board_sn', 'board_sn'), + ('train_score_info', 'uk_score_plan_course_stu', 'plan_id, c_id, student_id'), + ('train_student_checkin', 'uk_lesson_stu_checkin', 'plan_id, c_id, student_id, lesson_start_time'), + ('train_student_portrait', 'uk_stu_plan_portrait', 'student_id, plan_id') ), actual_unique AS ( SELECT @@ -272,28 +275,28 @@ BEGIN VALUES ('train_class_plan', 'fk_classplan_course', 'c_id', 'train_course', 'c_id'), ('train_class_plan', 'fk_classplan_teacher', 't_id', 'train_teacher', 't_id'), - ('train_dorm_auth', 'fk_dormauth_stu', 'student_id', 'train_student', 's_id'), - ('train_dorm_auth', 'fk_dormauth_plan', 'plan_id', 'train_class_plan', 'plan_id'), + ('train_class_report', 'fk_report_classroom', 'alloc_classroom_id', 'train_classroom_info', 'class_room_id'), + ('train_class_report', 'fk_report_dorm', 'alloc_dorm_id', 'train_dormitory_info', 'dorm_id'), + ('train_class_report', 'fk_report_plan', 'plan_id', 'train_class_plan', 'plan_id'), + ('train_class_report', 'fk_report_site', 'alloc_site_id', 'train_training_site', 'site_id'), + ('train_class_report', 'fk_report_stu', 'student_id', 'train_student', 's_id'), ('train_dorm_auth', 'fk_dormauth_dorm', 'dorm_id', 'train_dormitory_info', 'dorm_id'), - ('train_class_report', 'fk_classreport_plan', 'plan_id', 'train_class_plan', 'plan_id'), - ('train_class_report', 'fk_classreport_stu', 'student_id', 'train_student', 's_id'), - ('train_class_report', 'fk_classreport_dorm', 'alloc_dorm_id', 'train_dormitory_info', 'dorm_id'), - ('train_class_report', 'fk_classreport_classroom', 'alloc_classroom_id', 'train_classroom_info', 'class_room_id'), - ('train_class_report', 'fk_classreport_site', 'alloc_site_id', 'train_training_site', 'site_id'), + ('train_dorm_auth', 'fk_dormauth_plan', 'plan_id', 'train_class_plan', 'plan_id'), + ('train_dorm_auth', 'fk_dormauth_stu', 'student_id', 'train_student', 's_id'), ('train_electronic_board', 'fk_board_classroom', 'bind_classroom_id', 'train_classroom_info', 'class_room_id'), ('train_electronic_board', 'fk_board_plan', 'bind_plan_id', 'train_class_plan', 'plan_id'), - ('train_student_checkin', 'fk_checkin_plan', 'plan_id', 'train_class_plan', 'plan_id'), - ('train_student_checkin', 'fk_checkin_course', 'c_id', 'train_course', 'c_id'), - ('train_student_checkin', 'fk_checkin_stu', 'student_id', 'train_student', 's_id'), + ('train_score_info', 'fk_score_course', 'c_id', 'train_course', 'c_id'), + ('train_score_info', 'fk_score_plan', 'plan_id', 'train_class_plan', 'plan_id'), + ('train_score_info', 'fk_score_stu', 'student_id', 'train_student', 's_id'), ('train_student_checkin', 'fk_checkin_board', 'board_id', 'train_electronic_board', 'board_id'), - ('train_score_info', 'fk_scoreinfo_plan', 'plan_id', 'train_class_plan', 'plan_id'), - ('train_score_info', 'fk_scoreinfo_course', 'c_id', 'train_course', 'c_id'), - ('train_score_info', 'fk_scoreinfo_stu', 'student_id', 'train_student', 's_id'), - ('train_study_duration', 'fk_studydur_stu', 'student_id', 'train_student', 's_id'), - ('train_study_duration', 'fk_studydur_plan', 'plan_id', 'train_class_plan', 'plan_id'), - ('train_study_duration', 'fk_studydur_course', 'c_id', 'train_course', 'c_id'), + ('train_student_checkin', 'fk_checkin_course', 'c_id', 'train_course', 'c_id'), + ('train_student_checkin', 'fk_checkin_plan', 'plan_id', 'train_class_plan', 'plan_id'), + ('train_student_checkin', 'fk_checkin_stu', 'student_id', 'train_student', 's_id'), + ('train_student_portrait', 'fk_portrait_plan', 'plan_id', 'train_class_plan', 'plan_id'), ('train_student_portrait', 'fk_portrait_stu', 'student_id', 'train_student', 's_id'), - ('train_student_portrait', 'fk_portrait_plan', 'plan_id', 'train_class_plan', 'plan_id') + ('train_study_duration', 'fk_duration_course', 'c_id', 'train_course', 'c_id'), + ('train_study_duration', 'fk_duration_plan', 'plan_id', 'train_class_plan', 'plan_id'), + ('train_study_duration', 'fk_duration_stu', 'student_id', 'train_student', 's_id') ), actual_fk AS ( SELECT diff --git a/RuoYi-Vue/sql/train/v2/010_verify.sql b/RuoYi-Vue/sql/train/v2/010_verify.sql index ec7904f57..b96e4604b 100644 --- a/RuoYi-Vue/sql/train/v2/010_verify.sql +++ b/RuoYi-Vue/sql/train/v2/010_verify.sql @@ -348,15 +348,17 @@ BEGIN ('train_student_portrait', 'portrait_id') ), actual_identity AS ( - SELECT table_name, column_name - FROM information_schema.columns - WHERE table_schema = 'public' - AND table_name LIKE 'train_%' - AND is_identity = 'YES' + SELECT c.relname AS table_name, a.attname AS column_name + FROM sys_class c + JOIN sys_attribute a ON a.attrelid = c.oid + JOIN sys_namespace n ON n.oid = c.relnamespace + WHERE n.nspname = 'public' + AND c.relname LIKE 'train_%' + AND a.attidentity = 'd' ) SELECT 'MISSING_IDENTITY' AS diff_type, e.table_name, e.column_name FROM expected_identity e - LEFT JOIN actual_identity a + LEFT JOIN actual_identity a ON e.table_name = a.table_name AND e.column_name = a.column_name WHERE a.table_name IS NULL UNION ALL