123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- -- 修改解析任务存储库表的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;
|