-- 产品母版洗数据 · 流程引擎库侧(docs/adr-multi-customer-db-isolation.md §6.2)
|
--
|
-- 只在母版实例 cx-pg-template 的 jnpf_flow 上跑。幂等可重放。
|
-- 用法:docker exec -i cx-pg-template psql -U postgres -d jnpf_flow -v ON_ERROR_STOP=1 < 本文件
|
--
|
-- 与 product-baseline-cleanup.sql(jnpf_init 侧)【必须成套执行】:
|
-- workflow_template.f_flowable_id 引用 act_re_deployment.id_,只洗一边等于人为制造
|
-- ADR §4 的半切故障(2026-08-03 就因此让测试环境 44/49 流程报「找不到流程模板」)。
|
--
|
-- 保留【流程定义】,清空【运行时 + 历史 + 身份】。同样用白名单:
|
-- 漏清 → 客户1 的流程实例数据流到新客户;误清 → 定义没了,装完就发现。风险不对称。
|
--
|
-- ⚠️ 两类表绝对不能清,清了引擎会崩或重跑迁移:
|
-- · *_databasechangelog / *_databasechangeloglock —— Liquibase 的 schema 版本账本
|
-- · act_ge_property —— 引擎 schema 版本
|
-- ⚠️ act_ge_bytearray 同时存【部署资源】与【运行时变量 blob】,整表清会毁掉流程定义。
|
-- 2026-08-04 实查客户1 库:276 行【全部】有 deployment_id_,运行时 blob 为 0 行,
|
-- 故整表保留不会带入业务数据。仍保留下方按 deployment_id_ IS NULL 的删除作为通则,
|
-- 将来若出现运行时 blob 会被自动清掉。
|
-- ⚠️ 跑前已实查:没有任何 keep 表的 FK 指向将被清空的表,故 TRUNCATE ... CASCADE 不会波及定义。
|
|
BEGIN;
|
|
DO $$
|
DECLARE
|
keep text[] := ARRAY[
|
-- ① BPMN 流程定义(核心:与 jnpf_init.workflow_template.f_flowable_id 配对的就是它)
|
'act_re_deployment','act_re_procdef','act_re_model','act_procdef_info',
|
-- ② 定义资源与引擎版本(清了引擎起不来)
|
'act_ge_bytearray','act_ge_property',
|
-- ③ DMN / CMMN / App / Event 的【定义】部分(对应的 hi_/ru_ 在下面被清)
|
'act_dmn_decision','act_dmn_deployment','act_dmn_deployment_resource',
|
'act_cmmn_casedef','act_cmmn_deployment','act_cmmn_deployment_resource',
|
'act_app_appdef','act_app_deployment','act_app_deployment_resource',
|
'flw_channel_definition','flw_event_definition','flw_event_deployment','flw_event_resource',
|
-- ④ Liquibase schema 版本账本(清了会重跑迁移)
|
'act_app_databasechangelog','act_app_databasechangeloglock',
|
'act_cmmn_databasechangelog','act_cmmn_databasechangeloglock',
|
'act_dmn_databasechangelog','act_dmn_databasechangeloglock',
|
'flw_ev_databasechangelog','flw_ev_databasechangeloglock'
|
];
|
t text;
|
BEGIN
|
FOR t IN
|
SELECT tablename FROM pg_tables
|
WHERE schemaname = 'public' AND NOT (tablename = ANY(keep))
|
LOOP
|
EXECUTE format('TRUNCATE TABLE %I CASCADE', t);
|
END LOOP;
|
END $$;
|
|
-- act_ge_bytearray 的精确清理:只删运行时变量 blob,保留部署资源。
|
-- 通则形式而非按具体 id——将来出现运行时 blob 会被自动清掉。
|
DELETE FROM act_ge_bytearray WHERE deployment_id_ IS NULL;
|
|
COMMIT;
|