47 lines
1.5 KiB
PL/PgSQL
47 lines
1.5 KiB
PL/PgSQL
BEGIN;
|
|
|
|
-- Step 1: Merge duplicate tags by high-confidence canonicalized nameEn groups
|
|
WITH merge_map(source_id, target_id) AS (
|
|
VALUES
|
|
('cmkoutg0o0006jr04goozjhft', 'cmkqimx520005jx04vyegybp9'),
|
|
('cmkjjb387000a4j12pdf123zn', 'cmks0yz0h002xl1040w65w47d'),
|
|
('cmkun0ao70048jx04atm2lwwq', 'cmkryxmob0003l80414uo5zqz'),
|
|
('cmkrzqdlu000fl104qmy9gu2u', 'cmkqlcukz000dl5044c6z8542'),
|
|
('cmktk3biu000nl704iiohmv4i', 'cmksdlj9o0029jv04x9tdyc11'),
|
|
('cmktpotkp003eld04mv09ckde', 'cmkshubus0004la04zjuh5nn5')
|
|
)
|
|
INSERT INTO "project_tags" ("projectId", "tagId")
|
|
SELECT pt."projectId", mm.target_id
|
|
FROM "project_tags" pt
|
|
JOIN merge_map mm ON mm.source_id = pt."tagId"
|
|
ON CONFLICT ("projectId", "tagId") DO NOTHING;
|
|
|
|
WITH merge_map(source_id, target_id) AS (
|
|
VALUES
|
|
('cmkoutg0o0006jr04goozjhft', 'cmkqimx520005jx04vyegybp9'),
|
|
('cmkjjb387000a4j12pdf123zn', 'cmks0yz0h002xl1040w65w47d'),
|
|
('cmkun0ao70048jx04atm2lwwq', 'cmkryxmob0003l80414uo5zqz'),
|
|
('cmkrzqdlu000fl104qmy9gu2u', 'cmkqlcukz000dl5044c6z8542'),
|
|
('cmktk3biu000nl704iiohmv4i', 'cmksdlj9o0029jv04x9tdyc11'),
|
|
('cmktpotkp003eld04mv09ckde', 'cmkshubus0004la04zjuh5nn5')
|
|
)
|
|
DELETE FROM "tags" t
|
|
USING merge_map mm
|
|
WHERE t."id" = mm.source_id;
|
|
|
|
-- Step 2: Fill missing English names for ASCII-only tags
|
|
UPDATE "tags"
|
|
SET "nameEn" = "name"
|
|
WHERE ("nameEn" IS NULL OR "nameEn" = '')
|
|
AND "name" ~ '^[[:ascii:]]+$';
|
|
|
|
-- Step 3: Delete tags no longer referenced by any project
|
|
DELETE FROM "tags" t
|
|
WHERE NOT EXISTS (
|
|
SELECT 1
|
|
FROM "project_tags" pt
|
|
WHERE pt."tagId" = t."id"
|
|
);
|
|
|
|
COMMIT;
|