-- Dedup SyncChapterContent jobs in flight. -- -- Without this, the daemon's bookmark/cron enqueue paths would have to do a -- pre-check + insert race that's incorrect under concurrency. The partial -- unique index lets both producers use plain `INSERT ... ON CONFLICT DO -- NOTHING`: at most one (pending|running) job per chapter_id exists, and the -- slot frees again as soon as the job transitions to done/failed/dead so a -- re-enqueue is possible after the row is reaped or a force-refetch is wanted. -- -- Scoped to sync_chapter_content payloads only so Discover / SyncManga / -- SyncChapterList jobs (which don't carry a chapter_id) remain un-deduped. CREATE UNIQUE INDEX crawler_jobs_chapter_content_dedup_idx ON crawler_jobs ((payload->>'chapter_id')) WHERE state IN ('pending', 'running') AND payload->>'kind' = 'sync_chapter_content';