33 lines
1.2 KiB
SQL
33 lines
1.2 KiB
SQL
CREATE TABLE "background_jobs" (
|
|
"id" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'queued',
|
|
"dedupe_key" TEXT,
|
|
"payload" JSONB NOT NULL DEFAULT '{}',
|
|
"attempts" INTEGER NOT NULL DEFAULT 0,
|
|
"max_attempts" INTEGER NOT NULL DEFAULT 3,
|
|
"available_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"locked_by" TEXT,
|
|
"locked_until" TIMESTAMP(3),
|
|
"last_error" TEXT,
|
|
"completed_at" TIMESTAMP(3),
|
|
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "background_jobs_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE INDEX "background_jobs_status_available_at_idx"
|
|
ON "background_jobs"("status", "available_at" ASC, "created_at" ASC);
|
|
|
|
CREATE INDEX "background_jobs_type_status_available_at_idx"
|
|
ON "background_jobs"("type", "status", "available_at" ASC);
|
|
|
|
CREATE INDEX "background_jobs_lease_idx"
|
|
ON "background_jobs"("status", "locked_until" ASC)
|
|
WHERE "locked_until" IS NOT NULL;
|
|
|
|
CREATE UNIQUE INDEX "background_jobs_active_dedupe_key_idx"
|
|
ON "background_jobs"("type", "dedupe_key")
|
|
WHERE "dedupe_key" IS NOT NULL AND "status" IN ('queued', 'running');
|