30 lines
1.3 KiB
SQL
30 lines
1.3 KiB
SQL
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 <> '';
|
|
|