-- 同 host 同时只能有 1 个 status='running' 的 sync_log
-- 用 partial UNIQUE 索引把"锁"内嵌到 sync_logs 行:
--   - INSERT status='running' 时撞 unique → P2002,调用方 skip(并发拦截)
--   - finalize 时 UPDATE status='success'/'failed'/'partial' → partial 条件不满足 → 锁释放
--   - 进程崩留下 stale running:依赖 cron/手动 UPDATE status='aborted' 清理(留 TTL 兜底,见
--     SyncIncrementalSchedulerService 的看门狗)
--
-- 比独立 sync_locks 表简洁:沿用现有 schema,锁状态跟 sync_log 行同步,无需双写
CREATE UNIQUE INDEX "sync_logs_one_running_per_host"
  ON "sync_logs" ("host_id")
  WHERE "status" = 'running';
