2017-03-17 37 views
1

我想將一系列值作爲數組插入到可以定義數組的函數中。數組值來自另一個SQL函數,該函數提供了一個我想在前進函數中使用的值的表格,這是pgr_dijkstra ONE to MANY選項,它需要一個數組。PostgreSQL:將動態ARRAY插入函數

功能如何正常工作:

SELECT * 
FROM pgr_dijkstra('SELECT id,source,target,cost FROM my_table', start_id, ARRAY(1,2,3,4)); 

如何粗略想如果我就是要嘗試並插入這個數組到它的功能應該工作,但不和

SELECT foo.* 
FROM (SELECT ARRAY(SELECT DISTINCT id::integer 
        FROM (bla bla) AS ARRAY_QUERY, 
    pgr_dijkstra('SELECT id, source,target,cost FROM my_table', start_id, ARRAY_QUERY) AS foo; 

由於這隻給出:

ERROR: function pgr_dijkstra(unknown, integer, record, boolean) does not exist 

而該數組被創建爲一個整數,而不是一個記錄,所以不知道爲什麼這個正在發生。

可能是因爲我沒有完全理解數組如何在postgresql中工作,即使在閱讀了關於主題的文檔之後,以及如何從一個查詢實現值到另一個需要作爲數組輸入的值。希望有一個解決方法,或者只是我錯過了正確實施這一步。

解決:https://stackoverflow.com/a/42859060/7056396

+0

的可能的複製[在陣列中連接多個行上的PostgreSQL SQL](http://stackoverflow.com/questions/533256/concatenate-multiple-rows-in-an -array-with-sql-on-postgresql) –

+0

而不是使用子查詢更好,如果你創建一個cte,我幾乎可以肯定sintaxis不是你需要的。 –

+0

我不熟悉'cte'和'sintaxis'的術語。但是http://stackoverflow.com/a/42859060/7056396提到的以前的解決方案的工作原理也是我的意圖。 – leffe86

回答

1
select * 
from pgr_dijkstra(
    'select id,source,target,cost from my_table', 
    start_id, 
    array(select distinct id::integer from (bla bla)) 
); 
+0

該解決方案的工作原理與我的意圖一樣。我意識到現在我試圖實現類似的東西,但不正確,所以我不理會它。感謝您爲一個簡單問題展示了一個很好的解決方案 – leffe86