← back to NationalPaperHangers

db/migrations/015_featured_video_urls_check.sql

21 lines

-- 015 · CHECK constraint on installers.featured_video_urls
--
-- 014 added the column with NOT NULL DEFAULT '[]'::jsonb. NOT NULL alone
-- doesn't prevent UPDATE … SET featured_video_urls = '"oops"'::jsonb (a
-- jsonb string), which would later break the partial-index expression
-- jsonb_array_length() with "cannot get array length of a non-array".
--
-- Hardening per claude-codex r3 finding MEDIUM#7. Drop-create pattern keeps
-- this re-runnable.

BEGIN;

ALTER TABLE installers
  DROP CONSTRAINT IF EXISTS installers_featured_video_urls_is_array;

ALTER TABLE installers
  ADD CONSTRAINT installers_featured_video_urls_is_array
    CHECK (jsonb_typeof(featured_video_urls) = 'array');

COMMIT;