19 lines
1.2 KiB
SQL
19 lines
1.2 KiB
SQL
-- Очередь классификации категорий
|
|
CREATE TABLE IF NOT EXISTS finance.category_jobs (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
tx_id INT NOT NULL UNIQUE, -- одна задача на транзакцию
|
|
status TEXT NOT NULL DEFAULT 'NEW', -- NEW | PROCESSING | DONE | FAILED
|
|
attempts INT NOT NULL DEFAULT 0,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
started_at TIMESTAMPTZ,
|
|
finished_at TIMESTAMPTZ,
|
|
last_error TEXT
|
|
);
|
|
|
|
-- Быстрые выборки по статусу
|
|
CREATE INDEX IF NOT EXISTS ix_category_jobs_status ON finance.category_jobs(status);
|
|
|
|
-- (опционально) защита от «зависших» задач
|
|
CREATE INDEX IF NOT EXISTS ix_category_jobs_processing_time
|
|
ON finance.category_jobs(started_at)
|
|
WHERE status = 'PROCESSING'; |