130 lines
3.6 KiB
PL/PgSQL
130 lines
3.6 KiB
PL/PgSQL
|
|
-- htyws 多租户 org_id 历史数据回填(仅回填 NULL)
|
|||
|
|
-- 使用方式(moicen):
|
|||
|
|
-- psql "$DATABASE_URL" -v ON_ERROR_STOP=1 -f /path/to/tmp_htyws_org_backfill.sql
|
|||
|
|
|
|||
|
|
BEGIN;
|
|||
|
|
|
|||
|
|
-- 1) 先从已确定来源回填关系链:
|
|||
|
|
-- jihua_course_section <- jihua
|
|||
|
|
UPDATE jihua_course_section jcs
|
|||
|
|
SET org_id = j.org_id
|
|||
|
|
FROM jihua j
|
|||
|
|
WHERE jcs.jihua_id = j.id
|
|||
|
|
AND jcs.org_id IS NULL
|
|||
|
|
AND j.org_id IS NOT NULL;
|
|||
|
|
|
|||
|
|
-- daka_course_section <- daka
|
|||
|
|
UPDATE daka_course_section dcs
|
|||
|
|
SET org_id = d.org_id
|
|||
|
|
FROM daka d
|
|||
|
|
WHERE dcs.daka_id = d.id
|
|||
|
|
AND dcs.org_id IS NULL
|
|||
|
|
AND d.org_id IS NOT NULL;
|
|||
|
|
|
|||
|
|
-- 2) 回填 lianxi.org_id(优先 jihua,再 daka)
|
|||
|
|
UPDATE lianxi l
|
|||
|
|
SET org_id = jcs.org_id
|
|||
|
|
FROM jihua_course_section jcs
|
|||
|
|
WHERE l.jihua_course_section_id = jcs.id
|
|||
|
|
AND l.org_id IS NULL
|
|||
|
|
AND jcs.org_id IS NOT NULL;
|
|||
|
|
|
|||
|
|
UPDATE lianxi l
|
|||
|
|
SET org_id = dcs.org_id
|
|||
|
|
FROM daka_course_section dcs
|
|||
|
|
WHERE l.daka_course_section_id = dcs.id
|
|||
|
|
AND l.org_id IS NULL
|
|||
|
|
AND dcs.org_id IS NOT NULL;
|
|||
|
|
|
|||
|
|
-- 3) 回填 piyue / piyue_info
|
|||
|
|
UPDATE piyue p
|
|||
|
|
SET org_id = l.org_id
|
|||
|
|
FROM lianxi l
|
|||
|
|
WHERE p.lianxi_id = l.id
|
|||
|
|
AND p.org_id IS NULL
|
|||
|
|
AND l.org_id IS NOT NULL;
|
|||
|
|
|
|||
|
|
UPDATE piyue_info pi
|
|||
|
|
SET org_id = p.org_id
|
|||
|
|
FROM piyue p
|
|||
|
|
WHERE pi.piyue_id = p.id
|
|||
|
|
AND pi.org_id IS NULL
|
|||
|
|
AND p.org_id IS NOT NULL;
|
|||
|
|
|
|||
|
|
-- 4) 回填 course_section.org_id
|
|||
|
|
-- 4.1 course_section <- jihua_course_section
|
|||
|
|
UPDATE course_section cs
|
|||
|
|
SET org_id = jcs.org_id
|
|||
|
|
FROM jihua_course_section jcs
|
|||
|
|
WHERE jcs.course_section_id = cs.id
|
|||
|
|
AND cs.org_id IS NULL
|
|||
|
|
AND jcs.org_id IS NOT NULL;
|
|||
|
|
|
|||
|
|
-- 4.2 course_section <- daka_course_section
|
|||
|
|
UPDATE course_section cs
|
|||
|
|
SET org_id = dcs.org_id
|
|||
|
|
FROM daka_course_section dcs
|
|||
|
|
WHERE dcs.course_section_id = cs.id
|
|||
|
|
AND cs.org_id IS NULL
|
|||
|
|
AND dcs.org_id IS NOT NULL;
|
|||
|
|
|
|||
|
|
-- 4.3 course_section <- course
|
|||
|
|
UPDATE course_section cs
|
|||
|
|
SET org_id = c.org_id
|
|||
|
|
FROM course c
|
|||
|
|
WHERE cs.course_id = c.id
|
|||
|
|
AND cs.org_id IS NULL
|
|||
|
|
AND c.org_id IS NOT NULL;
|
|||
|
|
|
|||
|
|
-- 5) 回填 course.org_id(来自已回填完的 section)
|
|||
|
|
WITH section_org AS (
|
|||
|
|
SELECT cs.course_id, MIN(cs.org_id) AS resolved_org_id
|
|||
|
|
FROM course_section cs
|
|||
|
|
WHERE cs.course_id IS NOT NULL
|
|||
|
|
AND cs.org_id IS NOT NULL
|
|||
|
|
GROUP BY cs.course_id
|
|||
|
|
)
|
|||
|
|
UPDATE course c
|
|||
|
|
SET org_id = so.resolved_org_id
|
|||
|
|
FROM section_org so
|
|||
|
|
WHERE c.id = so.course_id
|
|||
|
|
AND c.org_id IS NULL;
|
|||
|
|
|
|||
|
|
-- 6) 回填 jihua / daka(来自其关系表)
|
|||
|
|
WITH jihua_rel_org AS (
|
|||
|
|
SELECT jcs.jihua_id, MIN(jcs.org_id) AS resolved_org_id
|
|||
|
|
FROM jihua_course_section jcs
|
|||
|
|
WHERE jcs.org_id IS NOT NULL
|
|||
|
|
GROUP BY jcs.jihua_id
|
|||
|
|
)
|
|||
|
|
UPDATE jihua j
|
|||
|
|
SET org_id = jro.resolved_org_id
|
|||
|
|
FROM jihua_rel_org jro
|
|||
|
|
WHERE j.id = jro.jihua_id
|
|||
|
|
AND j.org_id IS NULL;
|
|||
|
|
|
|||
|
|
WITH daka_rel_org AS (
|
|||
|
|
SELECT dcs.daka_id, MIN(dcs.org_id) AS resolved_org_id
|
|||
|
|
FROM daka_course_section dcs
|
|||
|
|
WHERE dcs.org_id IS NOT NULL
|
|||
|
|
GROUP BY dcs.daka_id
|
|||
|
|
)
|
|||
|
|
UPDATE daka d
|
|||
|
|
SET org_id = dro.resolved_org_id
|
|||
|
|
FROM daka_rel_org dro
|
|||
|
|
WHERE d.id = dro.daka_id
|
|||
|
|
AND d.org_id IS NULL;
|
|||
|
|
|
|||
|
|
COMMIT;
|
|||
|
|
|
|||
|
|
-- 回填后建议检查:
|
|||
|
|
-- SELECT 'course' tbl, count(*) FROM course WHERE org_id IS NULL
|
|||
|
|
-- UNION ALL SELECT 'course_section', count(*) FROM course_section WHERE org_id IS NULL
|
|||
|
|
-- UNION ALL SELECT 'lianxi', count(*) FROM lianxi WHERE org_id IS NULL
|
|||
|
|
-- UNION ALL SELECT 'piyue', count(*) FROM piyue WHERE org_id IS NULL
|
|||
|
|
-- UNION ALL SELECT 'piyue_info', count(*) FROM piyue_info WHERE org_id IS NULL
|
|||
|
|
-- UNION ALL SELECT 'jihua', count(*) FROM jihua WHERE org_id IS NULL
|
|||
|
|
-- UNION ALL SELECT 'daka', count(*) FROM daka WHERE org_id IS NULL
|
|||
|
|
-- UNION ALL SELECT 'jihua_course_section', count(*) FROM jihua_course_section WHERE org_id IS NULL
|
|||
|
|
-- UNION ALL SELECT 'daka_course_section', count(*) FROM daka_course_section WHERE org_id IS NULL;
|