-- 产品母版洗数据 · 流程引擎库侧(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;