feat(worker): add durable background jobs
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
DROP INDEX IF EXISTS idx_background_jobs_idempotency_key_unique;
|
||||
DROP INDEX IF EXISTS idx_background_jobs_idempotency_key;
|
||||
DROP INDEX IF EXISTS idx_background_jobs_locked_at;
|
||||
DROP INDEX IF EXISTS idx_background_jobs_job_type;
|
||||
DROP INDEX IF EXISTS idx_background_jobs_ready;
|
||||
DROP TABLE IF EXISTS background_jobs;
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
CREATE TABLE IF NOT EXISTS background_jobs (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
queue VARCHAR(100) NOT NULL DEFAULT 'default',
|
||||
job_type VARCHAR(150) NOT NULL,
|
||||
payload JSONB NOT NULL DEFAULT '{}',
|
||||
status VARCHAR(50) NOT NULL DEFAULT 'queued',
|
||||
priority INTEGER NOT NULL DEFAULT 0,
|
||||
attempts INTEGER NOT NULL DEFAULT 0,
|
||||
max_attempts INTEGER NOT NULL DEFAULT 3,
|
||||
scheduled_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
|
||||
locked_at TIMESTAMP WITH TIME ZONE,
|
||||
locked_by VARCHAR(150),
|
||||
idempotency_key VARCHAR(255),
|
||||
last_error TEXT,
|
||||
finished_at TIMESTAMP WITH TIME ZONE,
|
||||
failed_at TIMESTAMP WITH TIME ZONE,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_background_jobs_ready
|
||||
ON background_jobs(status, queue, scheduled_at, priority DESC, id);
|
||||
CREATE INDEX IF NOT EXISTS idx_background_jobs_job_type ON background_jobs(job_type);
|
||||
CREATE INDEX IF NOT EXISTS idx_background_jobs_locked_at ON background_jobs(locked_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_background_jobs_idempotency_key ON background_jobs(idempotency_key);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_background_jobs_idempotency_key_unique
|
||||
ON background_jobs(idempotency_key)
|
||||
WHERE idempotency_key IS NOT NULL AND idempotency_key <> '';
|
||||
|
||||
Reference in New Issue
Block a user