Files
Investidor-V2/migrations/005_mne_compatibility_guards.sql
nala 3dc7c5c649
tests / ci (push) Canceled after 0s
commit 30/9
2026-09-30 09:05:43 +02:00

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;