You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

50 lines
2.2 KiB

-- 2026-08-11 区域二值化:app_registry.region 统一成 cn(国内)/ hw(海外)
--
-- 背景:后台的部署表单早期把中文区域名('中国'/'美国'/'东亚'…)直接存进 app_registry.region,
-- 而一个应用实际只有「国内 / 海外」两套环境。后台已改为只提供这两档,
-- 前端对历史值做展示归一,但库里留着杂值会让「已用区域去重」「按区域筛选」继续踩坑,这里一次清干净。
--
-- 只对 **console 主库**(app_registry 所在库,即 supabase 那套)执行。幂等,可重复跑。
-- 注意:本脚本不动 stats_global_day.region —— 那列存的是各部署 analyze 上报的细分区域码
-- (cn/us/ea/…,见 services/comm/region.go),后端查询时会把 hw 展开成「除 cn 外的全部码」来兼容。
BEGIN;
-- 1) 国内:cn / 中国 / 国内(大小写不敏感)
UPDATE app_registry
SET region = 'cn', updatetime = EXTRACT(EPOCH FROM now())::bigint
WHERE lower(btrim(region)) IN ('cn', 'china', '中国', '国内')
AND region <> 'cn';
-- 2) 海外:其余所有非空值(us/ea/sea/… 与 '美国'/'东亚'… 等中文名)
UPDATE app_registry
SET region = 'hw', updatetime = EXTRACT(EPOCH FROM now())::bigint
WHERE btrim(coalesce(region, '')) <> ''
AND region NOT IN ('cn', 'hw');
-- 3) 账号绑定的区域 CSV(console_account.regions)同样归一:
-- 含 cn 的保留 cn,其余非空码折成 hw,去重后写回。
UPDATE console_account a
SET regions = sub.norm
FROM (
SELECT id,
(SELECT string_agg(DISTINCT r2, ',' ORDER BY r2)
FROM (
SELECT CASE WHEN lower(btrim(r)) IN ('cn', 'china', '中国', '国内')
THEN 'cn' ELSE 'hw' END AS r2
FROM unnest(string_to_array(regions, ',')) AS r
WHERE btrim(r) <> ''
) t
) AS norm
FROM console_account
WHERE coalesce(btrim(regions), '') <> ''
) sub
WHERE a.id = sub.id
AND sub.norm IS NOT NULL
AND a.regions <> sub.norm;
COMMIT;
-- 核对
-- SELECT id, name, app_name, region FROM app_registry ORDER BY app_name, region;
-- SELECT id, name, regions FROM console_account WHERE coalesce(regions,'') <> '';