fix(db): use DO blocks for idempotent ALTER TABLE (ADD CONSTRAINT IF NOT EXISTS is not valid PG syntax)

This commit is contained in:
Zac Gaetano 2026-05-18 19:48:11 -04:00
parent c662df94c4
commit eb248c690f

View file

@ -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);