dotnet-cqrs/Svrnty.CQRS.Events.PostgreSQL/Migrations/008_SagaState.sql

37 lines
1.3 KiB
SQL

-- Migration 008: Saga State Store
-- Stores saga orchestration state for long-running business processes
CREATE TABLE IF NOT EXISTS saga_states (
saga_id TEXT NOT NULL,
correlation_id TEXT NOT NULL,
saga_name TEXT NOT NULL,
state INT NOT NULL, -- 0=NotStarted, 1=Running, 2=Completed, 3=Compensating, 4=Compensated, 5=Failed, 6=Paused
current_step INT NOT NULL DEFAULT 0,
total_steps INT NOT NULL DEFAULT 0,
completed_steps JSONB NOT NULL DEFAULT '[]'::jsonb,
started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
last_updated TIMESTAMPTZ NOT NULL DEFAULT NOW(),
completed_at TIMESTAMPTZ NULL,
error_message TEXT NULL,
data JSONB NOT NULL DEFAULT '{}'::jsonb,
CONSTRAINT pk_saga_states PRIMARY KEY (saga_id)
);
-- Index for querying by correlation ID
CREATE INDEX IF NOT EXISTS idx_saga_states_correlation_id
ON saga_states (correlation_id);
-- Index for querying by saga name
CREATE INDEX IF NOT EXISTS idx_saga_states_saga_name
ON saga_states (saga_name);
-- Index for querying by state
CREATE INDEX IF NOT EXISTS idx_saga_states_state
ON saga_states (state);
-- Index for querying active sagas (Running, Paused, Compensating)
CREATE INDEX IF NOT EXISTS idx_saga_states_active
ON saga_states (state)
WHERE state IN (1, 3, 6);