私は以下の問題を抱えています。私はそれらの間の最短距離を計算したい緯度と経度のデータセットを持っています。Postgres - 関数のパラメータとしてのクエリ結果
明示的にパラメータを指定するときに機能する解決策が見つかりましたが、これらのパラメータを取得するクエリを使用して現在失敗しています。私のクエリは、次のようになります。
可変データの最初のサブクエリは、すべての緯度/経度座標のノードIDを取得します。後続のsourcedとtargetdは、この大きなデータセットをソースノードとターゲットノードに分割し、すべての行を配列に連結します。結果のデータセットには、配列を持つレコードが1つしかありません。
メインクエリでは、pgr_dijkstraが適用され、すべての送信元ノードとすべての送信先ノード間の最短ルートが検出されます。このアルゴリズムの署名が
pgr_dijkstra(text,anyarray,anyarray,boolean)
述べたクエリがしかし、レコードを生成し、この問題を解決するために、次の関数
pgr_dijkstra(text,record,record,boolean)
方法はあり呼び出そうとしているのですか?明示的にレコード変数を任意の配列にキャストすると(例えば、sourced :: bigint [])、このキャストは不可能であることを示す別の例外がスローされます。
ありがとうございました。
テストのためには、「テーブルソースAS SELECT array_agg」を作成し、データタイプを変更してみてください。しかし、リテラル配列を使った実例を1つ表示し、SELECT'にあるものと比較してください。 –
'sourced.array_agg、targetd.array_agg'をパラメータとして試してみてください。明示的なカラムエイリアスも複数使用することもできます(ソース)AS(...)または 'SELECT array_agg(id)ASソース ')を指定します。 – pozs
ここでパフォーマンス上の問題があるかどうかはわかりません。しかし、私はこれと同様の制限でtsrpを使ってルートを計算していましたが、時間がルートの数に比例するので遅すぎたので、一緒に計算するのではなく、マルチスレッドでC#アプリケーションを作成し、データベース。 –