30 lines
1.2 KiB
SQL
30 lines
1.2 KiB
SQL
-- Async sort jobs: lifecycle + result for collection expansion + cold drains.
|
|
-- Created 2026-05-01 (Spec B+F).
|
|
-- Depends on: 01_schema.sql (touch_updated_at() function, pgcrypto extension).
|
|
-- Docker initdb runs files alphabetically, so 01_ executes first; for live
|
|
-- one-shot psql application against an existing DB, both prerequisites
|
|
-- already exist.
|
|
|
|
CREATE TABLE IF NOT EXISTS sort_jobs (
|
|
job_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
phase TEXT NOT NULL CHECK (phase IN ('expanding','queued','draining','done','failed')),
|
|
phase_started_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
input_raw TEXT NOT NULL,
|
|
collection_ids TEXT[] NOT NULL DEFAULT '{}',
|
|
wsids TEXT[],
|
|
rules_raw TEXT,
|
|
result_json JSONB,
|
|
failure_reason TEXT
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS sort_jobs_phase_idx ON sort_jobs (phase);
|
|
CREATE INDEX IF NOT EXISTS sort_jobs_updated_idx ON sort_jobs (updated_at);
|
|
|
|
DROP TRIGGER IF EXISTS sort_jobs_touch ON sort_jobs;
|
|
CREATE TRIGGER sort_jobs_touch
|
|
BEFORE UPDATE ON sort_jobs
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION touch_updated_at();
|