24 lines
1.2 KiB
PL/PgSQL
24 lines
1.2 KiB
PL/PgSQL
-- 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;
|