fix(db): use DO blocks for idempotent ALTER TABLE (ADD CONSTRAINT IF NOT EXISTS is not valid PG syntax)
This commit is contained in:
parent
c662df94c4
commit
eb248c690f
1 changed files with 34 additions and 9 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue