From b72d5877da03004a114ebcd5323e63643fa38f4e Mon Sep 17 00:00:00 2001 From: yml2213 Date: Thu, 5 Nov 2026 16:26:57 +0800 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20=E4=BF=AE=E5=A4=8D=E4=BA=BA?= =?UTF-8?q?=E5=B7=A5=20SKU=20=E8=A7=84=E8=8C=83=E5=8C=96=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../129_fulfillment_retry_semantics.sql | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/apps/backend/src/db/migrations/129_fulfillment_retry_semantics.sql b/apps/backend/src/db/migrations/129_fulfillment_retry_semantics.sql index 304a1f34..b1851b38 100644 --- a/apps/backend/src/db/migrations/129_fulfillment_retry_semantics.sql +++ b/apps/backend/src/db/migrations/129_fulfillment_retry_semantics.sql @@ -90,6 +90,27 @@ SET internal_sku = canonicalize_internal_sku(internal_sku), updated_at = NOW() WHERE internal_sku <> canonicalize_internal_sku(internal_sku); +-- 人工 SKU 登记表是扫描派生数据。历史数据可能因大小写/空白差异登记了多行, +-- 规范化后会撞唯一键;先去重,优先保留有配置、统计更完整且更新时间更晚的行。 +WITH ranked_registry AS ( + SELECT + id, + ROW_NUMBER() OVER ( + PARTITION BY canonicalize_internal_sku(sku_key) + ORDER BY + (config_id IS NOT NULL) DESC, + item_count DESC, + updated_at DESC, + id DESC + ) AS candidate_rank + FROM manual_sku_registry + WHERE canonicalize_internal_sku(sku_key) IS NOT NULL +) +DELETE FROM manual_sku_registry registry +USING ranked_registry ranked +WHERE registry.id = ranked.id + AND ranked.candidate_rank > 1; + UPDATE manual_fulfillment_configs SET sku_key = canonicalize_internal_sku(sku_key), updated_at = NOW()