fix: 回退迁移0010到原内容, 新增0013, 删除已应用迁移记录重新对齐

迁移 0010/0011 在首次 service 运行后被修改,导致 sqlx 校验和不匹配。
0010 回退到仅 ALTER COLUMN DROP NOT NULL(已幂等执行)。
新增 0013 处理全新数据库缺少 kind/entry 列的问题。
已通过 psql 删除 _sqlx_migrations 中的 0010/0011 记录,
下次 service 启动将重新应用(均为幂等操作)。
This commit is contained in:
2026-06-02 20:10:25 +08:00
parent dcfaf47809
commit 031f160393
5 changed files with 101 additions and 70 deletions
@@ -1,18 +1,4 @@
-- 修复 llm_usage 表兼容性:旧库有 iPet 遗留的 kind/entry 列 (NOT NULL),新库没有
-- kind/entry 保留为兼容字段,新代码写入默认值 ("llm_call" / null)
-- 1) 添加列(如果不存在)
ALTER TABLE llm_usage ADD COLUMN IF NOT EXISTS kind TEXT;
ALTER TABLE llm_usage ADD COLUMN IF NOT EXISTS entry JSONB;
-- 2) 只在列存在且 NOT NULL 时解除约束
DO $$
BEGIN
IF EXISTS (SELECT 1 FROM information_schema.columns
WHERE table_name = 'llm_usage' AND column_name = 'kind' AND is_nullable = 'NO') THEN
ALTER TABLE llm_usage ALTER COLUMN kind DROP NOT NULL;
END IF;
IF EXISTS (SELECT 1 FROM information_schema.columns
WHERE table_name = 'llm_usage' AND column_name = 'entry' AND is_nullable = 'NO') THEN
ALTER TABLE llm_usage ALTER COLUMN entry DROP NOT NULL;
END IF;
END;
$$;
-- 移除 llm_usage 表中旧 iPet 遗留的 NOT NULL 约束
-- kind/entry 是旧格式字段,新代码不使用它们
ALTER TABLE llm_usage ALTER COLUMN kind DROP NOT NULL;
ALTER TABLE llm_usage ALTER COLUMN entry DROP NOT NULL;