我使用PostgreSQL协调大规模模拟,包括通过整数数组初始化我的应用程序的各个组件。特别是,我有一个" Controller"的概念,其中每个控制器需要初始化可变数量的参数。
我有一个job
表,它存储controller_id
和controller_parameters
外键,用于实际链接到我们想要的参数集。我的想法是开始做以下事情:
使用controller_id
动态选择一个表名,从中选择初始化参数。这些表中的每一个都有一个controller_parameters
列,用于将实际初始化数据链接到源表。
了解完表后,请运行SELECT * FROM @someController_parameters_table p WHERE p.controller_parameters = controller_parameters LIMIT 1;
将这些放入自定义类型,该类型具有要返回给客户端的整数数组字段。
主要问题是这有动态SQL,我听说这不是一件好事。
我建议的更改是设置一个新表,让我们说controller_parameters
,其中包含(controller_id, parameters_id, parameters[])
列。第三列存储单个控制器和参数集的初始化参数。
这种设计的优点是我们回到静态SQL领域,这很好。可以肯定的是,当我生成要插入到各个参数表的实际参数时,我通常使用交叉连接来获取各个参数的所有排列,并相应地将它们插入到各个表中。我个人不知道如何采用交叉连接的表格行并将其转换为int[]
,这是一个潜在的障碍。
思想?
答案 0 :(得分:0)
您可以使用array_agg
获取组的结果并将其转换为数组。
select controller_id, parameters_id, array_agg(parameter)
from ...
group by controller_id, parameters_id
这里有关于聚合函数的postgresql文档:
https://www.postgresql.org/docs/9.5/static/functions-aggregate.html