1. db/etl_feiqiu/migrations/20260423__app2a_add_member_order_count.sql: - dws.dws_finance_area_daily 增加 member_order_count 列 (integer NOT NULL DEFAULT 0) - 重建 app.v_dws_finance_area_daily RLS 视图暴露新列 - 同步重建 dws.v_dws_finance_area_daily(遵守双 schema 规则) - 列顺序因 PostgreSQL CREATE OR REPLACE VIEW 限制必须加在末尾 2. db/zqyy_app/migrations/20260423__ai_cache_allow_app2a.sql: - biz.ai_cache.chk_ai_cache_type CHECK 约束放开 app2a_finance_area 新值 - DROP 旧 7 项 CHECK + CREATE 含 8 项的新 CHECK(新增 app2a_finance_area) 3. docs/database/changes/ 两份变更文档: - 变更说明 + 兼容性 + 回滚策略 + 3-4 条验证 SQL 测试库已执行 + 验证通过。生产库待上线窗口按 checklist 跑。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
3.6 KiB
3.6 KiB
数据库变更:ai_cache.chk_ai_cache_type 约束放开 app2a_finance_area
日期:2026-04-23 迁移脚本:db/zqyy_app/migrations/20260423__ai_cache_allow_app2a.sql 相关设计:docs/ai/app2_finance_multi_app_design.md · Phase F 涉及库:
zqyy_app(biz schema) 风险等级:低(仅放开约束,不影响已有数据)
1 · 变更说明
约束变更
| Schema.Table | 约束名 | 变更类型 | 允许值 |
|---|---|---|---|
biz.ai_cache |
chk_ai_cache_type |
替换(DROP + CREATE) | 旧 7 项 + 新增 app2a_finance_area |
新约束完整定义:
CHECK (cache_type IN (
'app2_finance',
'app2a_finance_area', -- 新增
'app3_clue',
'app4_analysis',
'app5_tactics',
'app6_note_analysis',
'app7_customer_analysis',
'app8_clue_consolidated'
))
其他检查
ai_run_logs.app_type· 无 CHECK 约束(VARCHAR(30)),无需改动ai_trigger_jobs.*· 无相关 CHECK 约束,无需改动
2 · 兼容性影响
对已有数据
- 旧 7 项 cache_type 值全部保留,现有数据不动
- 无需数据迁移
对后端代码
CacheTypeEnum.APP2A_FINANCE_AREA枚举已在apps/backend/app/ai/schemas.py添加AICacheService.write_cache(cache_type='app2a_finance_area', ...)本约束放开后即可成功写入_SUPPORTED_APP_TYPES/dispatcher.run_single_app/build_app2a_area_prompt链路在 Phase C 已完成
对小程序
- board-finance.ts
_loadAIInsights已按 area 动态选cache_type - 后端 xcx API
/api/ai/cache/{cache_type}白名单自动涵盖(基于CacheTypeEnum)
3 · 回滚策略
回滚前置条件
必须先删除所有 cache_type = 'app2a_finance_area' 的记录,否则 CHECK 会拒绝。
-- 回滚预备
DELETE FROM biz.ai_cache WHERE cache_type = 'app2a_finance_area';
-- 回滚 DDL
BEGIN;
ALTER TABLE biz.ai_cache DROP CONSTRAINT IF EXISTS chk_ai_cache_type;
ALTER TABLE biz.ai_cache ADD CONSTRAINT chk_ai_cache_type
CHECK (cache_type IN (
'app2_finance', 'app3_clue', 'app4_analysis', 'app5_tactics',
'app6_note_analysis', 'app7_customer_analysis', 'app8_clue_consolidated'
));
COMMIT;
4 · 验证 SQL
验证 1 · 约束允许值包含 app2a_finance_area
SELECT pg_get_constraintdef(oid)
FROM pg_constraint
WHERE conname = 'chk_ai_cache_type';
-- 期望:返回的 CHECK 中含 'app2a_finance_area'
验证 2 · 插入新 cache_type 应成功
INSERT INTO biz.ai_cache (cache_type, site_id, target_id, result_json, status, expires_at)
VALUES ('app2a_finance_area', 1, 'test__all', '{}'::jsonb, 'valid', NOW() + INTERVAL '1 day');
-- 期望:成功插入
-- 清理:
DELETE FROM biz.ai_cache WHERE cache_type = 'app2a_finance_area' AND site_id = 1 AND target_id = 'test__all';
验证 3 · 旧 cache_type 插入仍正常
INSERT INTO biz.ai_cache (cache_type, site_id, target_id, result_json, status, expires_at)
VALUES ('app2_finance', 1, 'test__backward_compat', '{}'::jsonb, 'valid', NOW() + INTERVAL '1 day');
-- 期望:成功插入
DELETE FROM biz.ai_cache WHERE cache_type = 'app2_finance' AND site_id = 1 AND target_id = 'test__backward_compat';
5 · 变更记录
| 日期 | 操作 | 执行人 |
|---|---|---|
| 2026-04-23 | 迁移脚本产出 + 测试库执行通过 | Claude + Neo |
| 待定 | 生产库执行 | Neo(上线 checklist) |