Files
gochat/migrations/000026_add_background_jobs.up.sql
T

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 <> '';