SET search_path TO atlas, public; -- 包装重量与尺寸可分别由商品通用值或逐 SKU 值填写;空草稿也需要保存模式。 ALTER TABLE products ADD COLUMN package_weight_mode TEXT NOT NULL DEFAULT 'common' CHECK (package_weight_mode IN ('common', 'variant')), ADD COLUMN package_dimensions_mode TEXT NOT NULL DEFAULT 'common' CHECK (package_dimensions_mode IN ('common', 'variant')); -- 旧编辑器在每个 SKU 都有对应覆盖值时即展示逐 SKU 表单,迁移时保留该显示模式。 UPDATE products p SET package_weight_mode = 'variant' WHERE EXISTS ( SELECT 1 FROM product_variants v WHERE v.product_id = p.id AND v.deleted_at IS NULL ) AND NOT EXISTS ( SELECT 1 FROM product_variants v WHERE v.product_id = p.id AND v.deleted_at IS NULL AND v.shipping_weight_g IS NULL ); UPDATE products p SET package_dimensions_mode = 'variant' WHERE EXISTS ( SELECT 1 FROM product_variants v WHERE v.product_id = p.id AND v.deleted_at IS NULL ) AND NOT EXISTS ( SELECT 1 FROM product_variants v WHERE v.product_id = p.id AND v.deleted_at IS NULL AND (v.package_length_mm IS NULL OR v.package_width_mm IS NULL OR v.package_height_mm IS NULL) );