23 lines
680 B
PL/PgSQL
23 lines
680 B
PL/PgSQL
BEGIN;
|
|
|
|
SET ROLE work_role;
|
|
|
|
CREATE TABLE IF NOT EXISTS work.agent_dispatch_queue (
|
|
dispatch_id TEXT PRIMARY KEY REFERENCES work.agent_dispatch_intents(dispatch_id),
|
|
state TEXT NOT NULL,
|
|
available_at_unix_millis BIGINT NOT NULL,
|
|
attempts INTEGER NOT NULL DEFAULT 0,
|
|
claimed_by TEXT NOT NULL DEFAULT '',
|
|
updated_at_unix_millis BIGINT NOT NULL,
|
|
CHECK (state IN ('QUEUED','CLAIMED','COMPLETED','FAILED')),
|
|
CHECK (available_at_unix_millis > 0),
|
|
CHECK (attempts >= 0),
|
|
CHECK (updated_at_unix_millis > 0)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS agent_dispatch_queue_claim_idx
|
|
ON work.agent_dispatch_queue(state, available_at_unix_millis, dispatch_id);
|
|
|
|
RESET ROLE;
|
|
COMMIT;
|