次のようなテーブルがあります。
point_path_id line_path_id season_id gps_time heading roll pitch geometry
1 ___ ___ ___ ___ ___ ___ PostGISGeom
2 ___ ___ ___ ___ ___ ___ PostGISGeom
3 ___ ___ ___ ___ ___ ___ PostGISGeom
4 ___ ___ ___ ___ ___ ___ PostGISGeom
5 ___ ___ ___ ___ ___ ___ PostGISGeom
また、PHP には、更新したい ID のリストと、line_path_id と season_id の値があります。gps_time、heading、roll、pitch の配列もあります。
次の SQL ステートメントがあります (PHP からのエコー)
UPDATE greenland.point_paths
SET
line_path_id=1,
season_id=2,
gps_time=unnest(array[1303475178.0031,1303475178.0081,1303475179.0081,1303475180.0081,1303475181.0081]::double precision[]),
heading=unnest(array[-2.0819464,-2.0819407,-2.0820324,-2.08202,-2.0819855]::double precision[]),
roll=unnest(array[-0.007395,-0.007395,-0.0073832,-0.0073949,-0.0073853]::double precision[]),
pitch=unnest(array[-0.0246114,-0.0246115,-0.0246108,-0.024582,-0.0245905]::double precision[])
WHERE point_path_id IN (1,2,3,4,5);
これは挿入されていますが、正しくありません。配列の最初の値は、point_path_id の 5 つの ID すべてに挿入されます。私はテーブルに以下を取得します:
このネスト解除は、他の多くのステートメントでは正常に機能しますが、この形式では正しく機能しないようです。私の間違いはどこですか?
これより前に何が起こっているかについての背景は次のとおりです。データのJSON文字列がURLEAD(MATLAB)を介して送信され、PHPを介して多くのテーブルにデコード/挿入されます。
PostGIS ラインストリング GEOM が挿入され、その ID が返されます (line_path_id) シーズンが挿入され、その ID が返されます (season_id)
次に、ラインストリングが上記の表のポイントにダンプされ、シリアルの point_path_id が自動生成されて返されます。
次に、各ポイントに関連付けられたデータを挿入する必要があります(これが私がやろうとしていることです)
各ポイントの line_path_id、season_id、gps_time/heading/roll/pitch があります。時間/見出し/ロール/ピッチは、ポイント数の長さの配列になっています。
100,000 以上のポイントが存在する可能性がありますが、たとえば 5 でテストしてみましょう。
ポイントがダンプされた後、ここに再び表が表示されます。
point_path_id line_path_id season_id gps_time heading roll pitch geometry
1 ___ ___ ___ ___ ___ ___ PostGISGeom
2 ___ ___ ___ ___ ___ ___ PostGISGeom
3 ___ ___ ___ ___ ___ ___ PostGISGeom
4 ___ ___ ___ ___ ___ ___ PostGISGeom
5 ___ ___ ___ ___ ___ ___ PostGISGeom
変数も 2 つあります。 $line_path_id = # $season_id = #
そして 4 つの配列 $gps_time = [#,#,#,#,#]; 見出し... ロール... ピッチ...
各ポイント ジオメトリに関連する値を挿入する必要があります。これが目標です。
これが最善の解決策を見つけるのに役立つことを願っています。