mirror of https://github.com/synctv-org/synctv
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.2 KiB
SQL
38 lines
1.2 KiB
SQL
CREATE TABLE IF NOT EXISTS realtime_outbox (
|
|
id TEXT PRIMARY KEY,
|
|
aggregate_type TEXT NOT NULL,
|
|
aggregate_id TEXT NOT NULL,
|
|
event_type TEXT NOT NULL,
|
|
event_version BIGINT NOT NULL DEFAULT 1,
|
|
aggregate_version BIGINT,
|
|
payload JSONB NOT NULL,
|
|
status SMALLINT NOT NULL,
|
|
attempts INTEGER NOT NULL DEFAULT 0,
|
|
next_retry_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
locked_by TEXT,
|
|
locked_at TIMESTAMPTZ,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
dispatched_at TIMESTAMPTZ,
|
|
last_error TEXT,
|
|
CHECK (jsonb_typeof(payload) = 'object')
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_realtime_outbox_pending
|
|
ON realtime_outbox (next_retry_at, created_at, id)
|
|
WHERE status = 1;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_realtime_outbox_aggregate
|
|
ON realtime_outbox (aggregate_type, aggregate_id, created_at);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_realtime_outbox_sent_dispatched
|
|
ON realtime_outbox (dispatched_at)
|
|
WHERE status = 3 AND dispatched_at IS NOT NULL;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_realtime_outbox_dead_created
|
|
ON realtime_outbox (created_at)
|
|
WHERE status = 4;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_realtime_outbox_processing_locked
|
|
ON realtime_outbox (locked_at)
|
|
WHERE status = 2 AND locked_at IS NOT NULL;
|