diff --git a/src/app/db/migrations/0223_recommendation_plan_id_backfill.sql b/src/app/db/migrations/0223_recommendation_plan_id_backfill.sql index 827243d5..dc16877b 100644 --- a/src/app/db/migrations/0223_recommendation_plan_id_backfill.sql +++ b/src/app/db/migrations/0223_recommendation_plan_id_backfill.sql @@ -1,3 +1,21 @@ +-- Guard: fail if any recommendation is linked to more than one plan. +-- The spec asserts each recommendation belongs to exactly one plan; if real +-- data violates that the backfill cannot pick deterministically and must not +-- proceed silently. +DO $$ +BEGIN + IF EXISTS ( + SELECT 1 + FROM plan_recommendations + GROUP BY recommendation_id + HAVING count(*) > 1 + ) THEN + RAISE EXCEPTION + 'plan_id backfill aborted: one or more recommendations appear in multiple ' + 'plan_recommendations rows. Resolve cardinality before re-running.'; + END IF; +END $$; + UPDATE recommendation r SET plan_id = pr.plan_id FROM plan_recommendations pr