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