diff --git a/services/mam-api/src/db/schema_patch_editor.sql b/services/mam-api/src/db/schema_patch_editor.sql index 476daf6..1080703 100644 --- a/services/mam-api/src/db/schema_patch_editor.sql +++ b/services/mam-api/src/db/schema_patch_editor.sql @@ -43,19 +43,44 @@ CREATE INDEX IF NOT EXISTS idx_sequence_clips_asset_id ON sequence_clips(a -- --------------------------------------------------------------------------- -- Idempotent ALTER TABLE block — applies the new constraints and index to -- tables that were already created by an earlier run of this file. --- Safe to re-run: ADD CONSTRAINT IF NOT EXISTS / CREATE INDEX IF NOT EXISTS. +-- Uses DO blocks because PostgreSQL does not support ADD CONSTRAINT IF NOT EXISTS. +-- Safe to re-run. -- --------------------------------------------------------------------------- -ALTER TABLE sequences - ADD CONSTRAINT IF NOT EXISTS uq_sequences_project_name UNIQUE (project_id, name); +DO $$ BEGIN + IF NOT EXISTS ( + SELECT 1 FROM pg_constraint + WHERE conname = 'uq_sequences_project_name' AND conrelid = 'sequences'::regclass + ) THEN + ALTER TABLE sequences ADD CONSTRAINT uq_sequences_project_name UNIQUE (project_id, name); + END IF; +END $$; -ALTER TABLE sequence_clips - ADD CONSTRAINT IF NOT EXISTS chk_timeline_range CHECK (timeline_out_frames > timeline_in_frames); +DO $$ BEGIN + IF NOT EXISTS ( + SELECT 1 FROM pg_constraint + WHERE conname = 'chk_timeline_range' AND conrelid = 'sequence_clips'::regclass + ) THEN + ALTER TABLE sequence_clips ADD CONSTRAINT chk_timeline_range CHECK (timeline_out_frames > timeline_in_frames); + END IF; +END $$; -ALTER TABLE sequence_clips - ADD CONSTRAINT IF NOT EXISTS chk_source_range CHECK (source_out_frames > source_in_frames); +DO $$ BEGIN + IF NOT EXISTS ( + SELECT 1 FROM pg_constraint + WHERE conname = 'chk_source_range' AND conrelid = 'sequence_clips'::regclass + ) THEN + ALTER TABLE sequence_clips ADD CONSTRAINT chk_source_range CHECK (source_out_frames > source_in_frames); + END IF; +END $$; -ALTER TABLE sequence_clips - ADD CONSTRAINT IF NOT EXISTS chk_track_valid CHECK (track >= 0); +DO $$ BEGIN + IF NOT EXISTS ( + SELECT 1 FROM pg_constraint + WHERE conname = 'chk_track_valid' AND conrelid = 'sequence_clips'::regclass + ) THEN + ALTER TABLE sequence_clips ADD CONSTRAINT chk_track_valid CHECK (track >= 0); + END IF; +END $$; CREATE INDEX IF NOT EXISTS idx_sequence_clips_asset_id ON sequence_clips(asset_id);