-- ===================================================== -- Migration 007: Projection Checkpoints -- ===================================================== -- Creates the projection_checkpoints table for tracking -- event sourcing projection progress and state. -- -- Features: -- - Composite primary key (projection_name, stream_name) -- - Tracks last processed offset and events processed -- - Stores error information for failed projections -- - Indexes for efficient querying -- ===================================================== -- Create projection_checkpoints table CREATE TABLE IF NOT EXISTS projection_checkpoints ( projection_name TEXT NOT NULL, stream_name TEXT NOT NULL, last_processed_offset BIGINT NOT NULL DEFAULT -1, last_updated TIMESTAMPTZ NOT NULL DEFAULT NOW(), events_processed BIGINT NOT NULL DEFAULT 0, last_error TEXT NULL, last_error_at TIMESTAMPTZ NULL, CONSTRAINT pk_projection_checkpoints PRIMARY KEY (projection_name, stream_name) ); -- Create index on last_updated for querying recent checkpoints CREATE INDEX IF NOT EXISTS ix_projection_checkpoints_last_updated ON projection_checkpoints(last_updated DESC); -- Create index on stream_name for querying by stream CREATE INDEX IF NOT EXISTS ix_projection_checkpoints_stream_name ON projection_checkpoints(stream_name); -- Create index on projection_name for efficient lookups CREATE INDEX IF NOT EXISTS ix_projection_checkpoints_projection_name ON projection_checkpoints(projection_name); -- Add comment to table COMMENT ON TABLE projection_checkpoints IS 'Tracks event sourcing projection progress and state'; -- Add comments to columns COMMENT ON COLUMN projection_checkpoints.projection_name IS 'Unique name of the projection'; COMMENT ON COLUMN projection_checkpoints.stream_name IS 'Name of the event stream being processed'; COMMENT ON COLUMN projection_checkpoints.last_processed_offset IS 'Offset of the last successfully processed event'; COMMENT ON COLUMN projection_checkpoints.last_updated IS 'Timestamp when checkpoint was last updated'; COMMENT ON COLUMN projection_checkpoints.events_processed IS 'Total number of events processed by this projection'; COMMENT ON COLUMN projection_checkpoints.last_error IS 'Error message from the last failed event processing attempt'; COMMENT ON COLUMN projection_checkpoints.last_error_at IS 'Timestamp when the last error occurred';