-- 品牌抓取任务表:后台表达「要爬哪些品牌」,spider 服务来领取执行。 -- 与 ingest_jobs 分层:crawl_tasks 对外(跨机器),ingest_jobs 对内(后端 worker)。 CREATE TABLE IF NOT EXISTS crawl_tasks ( id bigserial PRIMARY KEY, brand_id bigint NOT NULL, status varchar(16) NOT NULL DEFAULT 'queued', priority smallint NOT NULL DEFAULT 0, max_shows smallint NOT NULL DEFAULT 0, worker varchar(64) NOT NULL DEFAULT '', locked_at bigint NOT NULL DEFAULT 0, attempts smallint NOT NULL DEFAULT 0, shows_submitted integer NOT NULL DEFAULT 0, last_error text NOT NULL DEFAULT '', created_at bigint NOT NULL DEFAULT 0, updated_at bigint NOT NULL DEFAULT 0 ); -- 一个品牌同时只允许一条任务:后台反复点「加入队列」不会产生重复任务, -- 而是把已完成/失败的记录重置为 queued。 CREATE UNIQUE INDEX IF NOT EXISTS uq_crawl_tasks_brand ON crawl_tasks (brand_id); -- 领取用索引:按优先级 + 入队顺序。 CREATE INDEX IF NOT EXISTS idx_crawl_tasks_pick ON crawl_tasks (status, priority DESC, id);