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>
71 lines
2.6 KiB
PL/PgSQL
71 lines
2.6 KiB
PL/PgSQL
-- =============================================================
|
||
-- 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 会失败
|