Files
junhong_cmp_fiber/migrations/000234_extend_polling_priority_item.down.sql
break 5ed6b39deb
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
feat(收口): 补齐 8 月迭代缺口并同步 Spec 与证据链
- 新增六对成对迁移 000232–000237:H5 弹窗类型、退款结算标识与申请人备注、优先轮询事实字段与两个新终态、通道阈值命中留痕、手机号最近解绑人、提现资格校验留痕
- 退款:原因必填与申请人备注、来源支付与渠道流水冻结、线下处理流水号补录审计、按订单查询可选退款方式、企微审批材料补齐且新增字段缺失映射即明确失败
- 优先轮询:人工关闭、有效期到期独立周期任务、失败与过期人工重触发、事实字段与异常重试查询、资产解析端点只读投影
- 通道阈值:命中事实同事务留痕与命中记录查询;员工账单:列表筛选与详情投影;商户池:列表投影与统计周期语义;H5:弹窗类型与类别排序
- 手机号:有效关联数量与最近解绑人、短信验证码失败次数限制;导出:佣金明细十五列与报表序号列
- 时间筛选:三处新增筛选纳入统一严格解析契约,员工账单产生时间参数改名
- 同步 12 份主 Spec 需求、两端点与异步任务证据链,门禁 context-health 与 OpenSpec 校验通过
2026-09-18 15:34:29 +08:00

67 lines
3.0 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 回滚卡轮询优先队列的事实字段补齐与两个新终态,与 up 严格成对,顺序与 up 的创建顺序严格倒序。
--
-- 不可逆说明ENG-MIG-001 例外条件):本迁移的 down 会删除资产类型与资产ID、设备号快照、
-- 代理归属、尝试上限、执行起止时间、下一次计划执行时间、出队时间、集成交互日志标识与
-- 有效期起算时间等列。这些事实(尤其是「为什么出队、什么时候执行过、上游交互日志标识」)
-- 只由本表承载,删除后无法由数据库自身重建,因此 down 只在上述事实已无留存需求时执行。
--
-- 守卫:存在已关闭或已过期终态的行时拒绝回滚——旧状态约束不允许这两个取值,
-- 回滚会连带丢失「人工关闭」与「有效期到期」两个出口留下的终态事实。
BEGIN;
DO $$
BEGIN
IF to_regclass('tb_polling_priority_item') IS NOT NULL THEN
-- 同一事务内先取排他锁再检查,避免检查与回滚之间写入新的已关闭/已过期事实。
LOCK TABLE tb_polling_priority_item IN ACCESS EXCLUSIVE MODE;
IF EXISTS (
SELECT 1 FROM tb_polling_priority_item
WHERE status IN ('closed', 'expired')
LIMIT 1
) THEN
RAISE EXCEPTION '存在已关闭或已过期的卡轮询优先项,拒绝回滚以避免丢失人工关闭与有效期到期终态事实,请人工核对后向前修复';
END IF;
END IF;
END
$$;
DROP INDEX IF EXISTS idx_polling_priority_item_next_run;
ALTER TABLE tb_polling_priority_item
DROP CONSTRAINT IF EXISTS ck_polling_priority_item_attempt_limit,
DROP CONSTRAINT IF EXISTS ck_polling_priority_item_asset,
DROP CONSTRAINT IF EXISTS ck_polling_priority_item_asset_type;
-- 恢复 000228 的状态约束与终态-结果约束原文。
ALTER TABLE tb_polling_priority_item
DROP CONSTRAINT IF EXISTS ck_polling_priority_item_terminal_result;
ALTER TABLE tb_polling_priority_item
ADD CONSTRAINT ck_polling_priority_item_terminal_result CHECK (
(status = 'completed' AND result = 'success')
OR (status = 'failed' AND result = 'failed')
OR status IN ('pending', 'processing')
);
ALTER TABLE tb_polling_priority_item
DROP CONSTRAINT IF EXISTS ck_polling_priority_item_status;
ALTER TABLE tb_polling_priority_item
ADD CONSTRAINT ck_polling_priority_item_status CHECK (status IN ('pending', 'processing', 'completed', 'failed'));
ALTER TABLE tb_polling_priority_item
DROP COLUMN IF EXISTS priority_effective_from,
DROP COLUMN IF EXISTS integration_log_id,
DROP COLUMN IF EXISTS dequeued_at,
DROP COLUMN IF EXISTS next_run_at,
DROP COLUMN IF EXISTS finished_at,
DROP COLUMN IF EXISTS started_at,
DROP COLUMN IF EXISTS attempt_limit,
DROP COLUMN IF EXISTS agent_shop_id_snapshot,
DROP COLUMN IF EXISTS device_no_snapshot,
DROP COLUMN IF EXISTS asset_id,
DROP COLUMN IF EXISTS asset_type;
COMMIT;