fix: migration 040 — run UPDATE before ADD CONSTRAINT (correct order)
ALTER TABLE ADD CONSTRAINT validates existing rows immediately, so the UPDATE must run first to migrate 'standard' → 'bronze' before the new constraint is applied. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -15,15 +15,15 @@ CREATE UNIQUE INDEX IF NOT EXISTS uq_chat_rooms_general_per_hotel
|
|||||||
WHERE type = 'general';
|
WHERE type = 'general';
|
||||||
|
|
||||||
-- Fix 2: replace 'standard' tier with 'bronze' (the UI uses bronze/silver/gold/platinum)
|
-- Fix 2: replace 'standard' tier with 'bronze' (the UI uses bronze/silver/gold/platinum)
|
||||||
-- Drop the old check constraint that only allows 'standard' instead of 'bronze'
|
-- Drop the old check constraint first
|
||||||
ALTER TABLE guests DROP CONSTRAINT IF EXISTS guests_loyalty_tier_check;
|
ALTER TABLE guests DROP CONSTRAINT IF EXISTS guests_loyalty_tier_check;
|
||||||
|
|
||||||
-- Add the correct constraint
|
-- Migrate existing 'standard' rows to 'bronze' (must happen BEFORE adding the new constraint)
|
||||||
ALTER TABLE guests
|
|
||||||
ADD CONSTRAINT guests_loyalty_tier_check
|
|
||||||
CHECK (loyalty_tier IN ('bronze', 'silver', 'gold', 'platinum'));
|
|
||||||
|
|
||||||
-- Migrate existing 'standard' rows to 'bronze'
|
|
||||||
UPDATE guests
|
UPDATE guests
|
||||||
SET loyalty_tier = 'bronze'
|
SET loyalty_tier = 'bronze'
|
||||||
WHERE loyalty_tier NOT IN ('bronze', 'silver', 'gold', 'platinum');
|
WHERE loyalty_tier NOT IN ('bronze', 'silver', 'gold', 'platinum');
|
||||||
|
|
||||||
|
-- Now add the correct constraint
|
||||||
|
ALTER TABLE guests
|
||||||
|
ADD CONSTRAINT guests_loyalty_tier_check
|
||||||
|
CHECK (loyalty_tier IN ('bronze', 'silver', 'gold', 'platinum'));
|
||||||
|
|||||||
Reference in New Issue
Block a user