alter_parse_task_repository_task_source.sql 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. -- 修改解析任务存储库表的task_source字段类型
  2. -- 将task_source字段从VARCHAR(300)修改为JSONB类型
  3. -- 开始事务
  4. BEGIN;
  5. -- 步骤1: 添加一个临时的JSONB字段
  6. ALTER TABLE public.parse_task_repository
  7. ADD COLUMN task_source_new JSONB;
  8. -- 步骤2: 将现有的VARCHAR数据转换并复制到新字段
  9. -- 对于已经是JSON格式的字符串,直接转换
  10. -- 对于普通字符串,包装成JSON对象
  11. UPDATE public.parse_task_repository
  12. SET task_source_new = CASE
  13. -- 尝试解析为JSON,如果成功则使用解析结果
  14. WHEN task_source::text ~ '^[\[\{].*[\]\}]$' THEN task_source::jsonb
  15. -- 如果不是JSON格式,包装成简单的JSON对象
  16. ELSE json_build_object('source', task_source, 'migrated', true)::jsonb
  17. END;
  18. -- 步骤3: 删除原有字段
  19. ALTER TABLE public.parse_task_repository
  20. DROP COLUMN task_source;
  21. -- 步骤4: 重命名新字段
  22. ALTER TABLE public.parse_task_repository
  23. RENAME COLUMN task_source_new TO task_source;
  24. -- 步骤5: 设置字段为NOT NULL (如果需要)
  25. ALTER TABLE public.parse_task_repository
  26. ALTER COLUMN task_source SET NOT NULL;
  27. -- 步骤6: 更新字段注释
  28. COMMENT ON COLUMN public.parse_task_repository.task_source IS '任务来源,JSONB格式,包含详细的来源信息';
  29. -- 提交事务
  30. COMMIT;
  31. -- 验证修改结果
  32. SELECT
  33. column_name,
  34. data_type,
  35. is_nullable,
  36. column_default
  37. FROM information_schema.columns
  38. WHERE table_name = 'parse_task_repository'
  39. AND column_name = 'task_source';
  40. -- 显示一些示例数据以验证转换
  41. SELECT
  42. id,
  43. task_name,
  44. task_source,
  45. pg_typeof(task_source) as data_type
  46. FROM public.parse_task_repository
  47. LIMIT 5;