我正在使用PostgreSQL來協調大型模擬,其中涉及通過整數數組初始化我的應用程序的各個組件。特別是,我有一個「控制器」的概念,每個控制器都需要可變數量的參數進行初始化。動態表名vs靜態表中的數組列
我有一個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[]
,因此這是一個潛在的障礙。
想法?
所以ARRAY_AGG()像陣列(),但你不必指定列?它只是做不在Group By子句中的每一列?訂單是否與Order By子句中的內容相同? – ijustlovemath