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
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,'') <> '';
|
|
|