V2026_01_21_03__enhance_data_sources.sql 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. -- 数据源表增强
  2. -- 新增 value_type, aggregate_type, separator 字段
  3. -- 修改 node_ids 为 JSONB 类型以支持混合节点引用
  4. -- 添加新字段
  5. ALTER TABLE data_sources
  6. ADD COLUMN IF NOT EXISTS value_type VARCHAR(20) DEFAULT 'text';
  7. ALTER TABLE data_sources
  8. ADD COLUMN IF NOT EXISTS aggregate_type VARCHAR(20) DEFAULT 'first';
  9. ALTER TABLE data_sources
  10. ADD COLUMN IF NOT EXISTS separator VARCHAR(50) DEFAULT '';
  11. -- 添加字段注释
  12. COMMENT ON COLUMN data_sources.value_type IS '值类型: text/image/table/mixed';
  13. COMMENT ON COLUMN data_sources.aggregate_type IS '聚合方式: first/last/concat/sum/avg/list';
  14. COMMENT ON COLUMN data_sources.separator IS '聚合分隔符(concat时使用)';
  15. -- 检查并修改 node_ids 类型(如果是 TEXT[] 则转为 JSONB)
  16. -- 注意:如果已经是 JSONB 类型,此语句会失败,这是预期行为
  17. DO $$
  18. BEGIN
  19. -- 检查当前类型
  20. IF EXISTS (
  21. SELECT 1
  22. FROM information_schema.columns
  23. WHERE table_name = 'data_sources'
  24. AND column_name = 'node_ids'
  25. AND data_type = 'ARRAY'
  26. ) THEN
  27. -- 如果是数组类型,转换为 JSONB
  28. ALTER TABLE data_sources
  29. ALTER COLUMN node_ids TYPE JSONB
  30. USING CASE
  31. WHEN node_ids IS NULL THEN '{"refs": []}'::JSONB
  32. ELSE jsonb_build_object('refs',
  33. (SELECT jsonb_agg(jsonb_build_object('type', 'graph_node', 'id', elem))
  34. FROM unnest(node_ids::text[]) AS elem)
  35. )
  36. END;
  37. RAISE NOTICE 'Converted node_ids from TEXT[] to JSONB';
  38. ELSE
  39. RAISE NOTICE 'node_ids is already JSONB or compatible type';
  40. END IF;
  41. END $$;
  42. -- 设置默认值
  43. ALTER TABLE data_sources
  44. ALTER COLUMN node_ids SET DEFAULT '{"refs": []}'::JSONB;