fix(db): 适配KingbaseES系统目录元数据查询
This commit is contained in:
1 parent
35774cc53c
commit
7191f5e3a9
2 files changed
+59
-54
No files matched your search
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user