| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- -- 数据源表增强
- -- 新增 value_type, aggregate_type, separator 字段
- -- 修改 node_ids 为 JSONB 类型以支持混合节点引用
- -- 添加新字段
- ALTER TABLE data_sources
- ADD COLUMN IF NOT EXISTS value_type VARCHAR(20) DEFAULT 'text';
- ALTER TABLE data_sources
- ADD COLUMN IF NOT EXISTS aggregate_type VARCHAR(20) DEFAULT 'first';
- ALTER TABLE data_sources
- ADD COLUMN IF NOT EXISTS separator VARCHAR(50) DEFAULT '';
- -- 添加字段注释
- COMMENT ON COLUMN data_sources.value_type IS '值类型: text/image/table/mixed';
- COMMENT ON COLUMN data_sources.aggregate_type IS '聚合方式: first/last/concat/sum/avg/list';
- COMMENT ON COLUMN data_sources.separator IS '聚合分隔符(concat时使用)';
- -- 检查并修改 node_ids 类型(如果是 TEXT[] 则转为 JSONB)
- -- 注意:如果已经是 JSONB 类型,此语句会失败,这是预期行为
- DO $$
- BEGIN
- -- 检查当前类型
- IF EXISTS (
- SELECT 1
- FROM information_schema.columns
- WHERE table_name = 'data_sources'
- AND column_name = 'node_ids'
- AND data_type = 'ARRAY'
- ) THEN
- -- 如果是数组类型,转换为 JSONB
- ALTER TABLE data_sources
- ALTER COLUMN node_ids TYPE JSONB
- USING CASE
- WHEN node_ids IS NULL THEN '{"refs": []}'::JSONB
- ELSE jsonb_build_object('refs',
- (SELECT jsonb_agg(jsonb_build_object('type', 'graph_node', 'id', elem))
- FROM unnest(node_ids::text[]) AS elem)
- )
- END;
- RAISE NOTICE 'Converted node_ids from TEXT[] to JSONB';
- ELSE
- RAISE NOTICE 'node_ids is already JSONB or compatible type';
- END IF;
- END $$;
- -- 设置默认值
- ALTER TABLE data_sources
- ALTER COLUMN node_ids SET DEFAULT '{"refs": []}'::JSONB;
|