-- ============================================================ -- 图片 URL 迁移:/images/drugs/ → /images/ -- ============================================================ -- 执行方式: -- docker exec -i pharmacopoeia-pg psql -U postgres -d pharmacopoeia < database/migrate_image_urls.sql -- -- 回滚方式: -- 将下面 SQL 中的 /images/" 替换为 /images/drugs/" 再执行一遍 -- ============================================================ BEGIN; -- 1. 更新 drugs.sections (jsonb) 中的 标签 URL -- sections 是 jsonb,需要 text → regexp_replace → jsonb 来回转 UPDATE drugs SET sections = regexp_replace(sections::text, '/images/drugs/', '/images/', 'g')::jsonb WHERE sections::text LIKE '%/images/drugs/%'; -- 2. 更新 drug_chunks.content (text) 中的 标签 URL UPDATE drug_chunks SET content = replace(content, '/images/drugs/', '/images/') WHERE content LIKE '%/images/drugs/%'; -- 3. 验证:确认无残留旧 URL DO $$ DECLARE drugs_old INT; chunks_old INT; BEGIN SELECT COUNT(*) INTO drugs_old FROM drugs WHERE sections::text LIKE '%/images/drugs/%'; SELECT COUNT(*) INTO chunks_old FROM drug_chunks WHERE content LIKE '%/images/drugs/%'; RAISE NOTICE '旧 URL 残留: drugs=% chunks=%', drugs_old, chunks_old; IF drugs_old > 0 OR chunks_old > 0 THEN RAISE WARNING '仍有旧 URL 残留,请检查!'; ELSE RAISE NOTICE '✅ 迁移完成,无旧 URL 残留'; END IF; END $$; COMMIT;