-- ============================================================= -- Migration: 20260423__ai_cache_allow_app2a.sql -- Purpose: 放开 biz.ai_cache.chk_ai_cache_type CHECK 约束, -- 允许新 cache_type 'app2a_finance_area'(app2a 区域财务洞察) -- Related: docs/ai/app2_finance_multi_app_design.md v2 · Phase F -- Author: Claude + Neo -- ============================================================= -- -- 改动说明: -- 1. DROP 旧 CHECK 约束 chk_ai_cache_type -- 2. CREATE 新 CHECK 约束,加入 'app2a_finance_area' 值 -- -- 兼容性: -- - 旧 cache_type 值全部保留,仅新增一个允许值 -- - 无需数据迁移 -- -- 回滚策略: -- 见文件末 ROLLBACK 段 -- -- 验证 SQL: -- 见文件末 VERIFICATION 段 -- ============================================================= BEGIN; -- 1. DROP 旧约束 ALTER TABLE biz.ai_cache DROP CONSTRAINT IF EXISTS chk_ai_cache_type; -- 2. CREATE 新约束(加入 app2a_finance_area) ALTER TABLE biz.ai_cache ADD CONSTRAINT chk_ai_cache_type CHECK (cache_type IN ( 'app2_finance', 'app2a_finance_area', -- 2026-04-23 新增(区域财务洞察 · 64 组合) 'app3_clue', 'app4_analysis', 'app5_tactics', 'app6_note_analysis', 'app7_customer_analysis', 'app8_clue_consolidated' )); COMMIT; -- ============================================================= -- VERIFICATION(事后手工执行) -- ============================================================= -- 1. 约束允许值检查 -- 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', '{}', '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'; -- ============================================================= -- ROLLBACK -- ============================================================= -- 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; -- 注:回滚前必须先 DELETE 所有 cache_type = 'app2a_finance_area' 的记录,否则 CHECK 会失败