|
@@ -0,0 +1,57 @@
|
|
|
+-- 修改解析任务存储库表的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;
|