-- Corrective migration: preserve the already applied 001-004 files. BEGIN; SET LOCAL lock_timeout = '10s'; SELECT pg_advisory_xact_lock(hashtextextended('mne:005_compatibility_guards',0)); DO $guard$ BEGIN IF to_regclass('mne.compatibility_controls') IS NULL THEN RAISE EXCEPTION '004 compatibility migration is required'; END IF; IF EXISTS(SELECT 1 FROM mne.compatibility_controls WHERE capability='canonical_read' AND (enabled OR percentage<>0)) THEN RAISE EXCEPTION 'Canonical control is not disabled; explicit reconciliation required'; END IF; IF EXISTS(SELECT 1 FROM pg_constraint WHERE conrelid='mne.compatibility_controls'::regclass AND conname='ck_mne_005_canonical_disabled') THEN IF (SELECT pg_get_constraintdef(oid) FROM pg_constraint WHERE conrelid='mne.compatibility_controls'::regclass AND conname='ck_mne_005_canonical_disabled') <> $$CHECK (((capability <> 'canonical_read'::text) OR ((NOT enabled) AND (percentage = 0))))$$ THEN RAISE EXCEPTION 'Unexpected canonical control constraint'; END IF; ELSE ALTER TABLE mne.compatibility_controls ADD CONSTRAINT ck_mne_005_canonical_disabled CHECK (capability <> 'canonical_read' OR (NOT enabled AND percentage=0)); END IF; END $guard$; COMMIT;