2017-03-17 5 views
1

Ich versuche, eine Reihe von Werten als ein Array in eine Funktion einzufügen, wo ein Array definiert werden kann. Die Array-Werte stammen von einer anderen SQL-Funktion, die eine Tabelle mit den Werten angibt, die ich in der proceeding-Funktion verwenden möchte. Dies ist die Option pgr_dijkstra ONE to MANY, die ein Array erfordert.PostgreSQL: Einfügen dynamischer ARRAY in Funktionen

Wie die Funktion normal funktioniert:

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

Wie ich in sie grob gedacht sollte die Funktion arbeiten, wenn ich versuchen würde, und dieses Array einfügen, aber nicht und

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; 

Da diese gibt nur:

Und das Array wird als eine Ganzzahl und kein Datensatz erstellt, also nicht sicher, warum dies tritt auf.

Möglicherweise weil ich nicht völlig verstehe, wie Arrays in postgresql arbeiten, auch nach dem Lesen der Dokumentation zu diesem Thema und wie Werte von einer Abfrage in eine andere zu implementieren, wo sie als Array-Eingabe erforderlich sind. Hoffentlich gibt es einen Workaround dafür oder einfach nur einen Schritt, den ich bei der korrekten Implementierung vermisst habe.

Gelöst: https://stackoverflow.com/a/42859060/7056396

+0

Mögliches Duplikat [mehrere Zeilen in einem Array mit SQL auf PostgreSQL Verketten] (http://stackoverflow.com/questions/533256/concatenate-multiple-rows-in-an -array-with-sql-on-postgresql) –

+0

Auch anstatt eine Unterabfrage zu verwenden, ist es besser, wenn Sie eine CTE erstellen, ich bin mir fast sicher, dass die Syntax nicht die ist, die Sie brauchen. –

+0

Ich bin nicht vertraut mit 'cte' und 'sintaxis' Terminologie. Aber die vorherige Lösung, die von http://stackoverflow.com/a/42859060/7056396 erwähnt wird, funktioniert so, wie ich es auch beabsichtigt hatte. – leffe86

Antwort

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

Diese Lösung funktioniert so, wie ich es beabsichtigt hatte. Ich merke jetzt, dass ich versucht habe, etwas Ähnliches zu implementieren, aber falsch, also habe ich es ignoriert. Danke, dass Sie eine gute Lösung für ein einfaches Problem gezeigt haben. – leffe86