-- 数据源表增强 -- 新增 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;