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