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
|
-- Idempotent ALTER TABLE block — applies the new constraints and index to
|
||||||
-- tables that were already created by an earlier run of this file.
|
-- 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
|
DO $$ BEGIN
|
||||||
ADD CONSTRAINT IF NOT EXISTS uq_sequences_project_name UNIQUE (project_id, name);
|
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
|
DO $$ BEGIN
|
||||||
ADD CONSTRAINT IF NOT EXISTS chk_timeline_range CHECK (timeline_out_frames > timeline_in_frames);
|
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
|
DO $$ BEGIN
|
||||||
ADD CONSTRAINT IF NOT EXISTS chk_source_range CHECK (source_out_frames > source_in_frames);
|
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
|
DO $$ BEGIN
|
||||||
ADD CONSTRAINT IF NOT EXISTS chk_track_valid CHECK (track >= 0);
|
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);
|
CREATE INDEX IF NOT EXISTS idx_sequence_clips_asset_id ON sequence_clips(asset_id);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue