nuthatch/sql/003_recovery_settlement.sql

33 lines
1,018 B
MySQL
Raw Normal View History

2026-07-18 22:49:19 +09:00
ALTER TABLE mutations
ADD COLUMN IF NOT EXISTS dispatch_started_at TIMESTAMPTZ,
ADD COLUMN IF NOT EXISTS request_deadline_at TIMESTAMPTZ,
ADD COLUMN IF NOT EXISTS worker_lease_until TIMESTAMPTZ,
ADD COLUMN IF NOT EXISTS settled_at TIMESTAMPTZ;
DO $$
BEGIN
IF EXISTS (
SELECT 1
FROM mutations
WHERE external_state = 'pending'
) THEN
RAISE EXCEPTION
'recovery settlement migration requires no pending mutations';
END IF;
END
$$;
ALTER TABLE mutations
ADD CONSTRAINT mutations_dispatch_timing_check CHECK (
(external_state <> 'pending') OR
(dispatch_started_at IS NOT NULL AND
request_deadline_at IS NOT NULL AND
worker_lease_until IS NOT NULL)
) NOT VALID;
ALTER TABLE mutations
VALIDATE CONSTRAINT mutations_dispatch_timing_check;
CREATE INDEX IF NOT EXISTS mutations_recovery_idx
ON mutations (worker_lease_until, request_deadline_at, updated_at)
WHERE state IN ('prepared', 'applying');