PostGIS関数呼び出し内にネストされたクエリが本当に必要なPostGISクエリがあります:
UPDATE raw.geocoding
SET the_geom = ST_Centroid(
ST_Collect(
SELECT the_geom
FROM raw.geocoding
WHERE hash = ((E'0101000020090C000081610F9CC5DC3341EE672E6E723B3241')::varchar),
SELECT the_geom
FROM raw.geocoding
WHERE hash = ((E'0101000020090C00002CF887E0C5DC3341C9E5B2DF2A383241')::varchar)
)
)
WHERE hash = ((E'3e638a27c6c38f05026252f4a0b57b2e')::varchar)
残念ながら、これは機能しません。ネストされたクエリの開始時に構文エラーが発生します。
ERROR: syntax error at or near "SELECT"
LINE 4: SELECT the_geom
^
********** Error **********
ERROR: syntax error at or near "SELECT"
SQL state: 42601
Character: 86
PostGIS関数パラメーターとしてネストされたクエリを持つことができないように見えますか?
私はPostGISドキュメントを熟読しましたが、これに対処するための明確なガイダンスを見つけることができません。
PostgresにはpgSQLで変数を実行する方法があるように見えますが、これが標準のクエリでどのように実行されるかは私にはわかりません。これは、C#プログラムから数万回または数十万回実行されるクエリです。それはさておき、必要に応じてpgSQLストアドプロシージャを実行できます。最初にもっと単純な代替手段がないことを確認したかっただけです。
ご参考までに、クエリはnpgsqlで生成されたパラメータ化されたクエリの結果であるため、乱雑に見えます。npgsqlは、冗長な入力とエスケープに特に注意を払っていると言っても過言ではありません。
PostGIS 2.0.1、Postgres 9.1.5、およびnpgsql2.0.12を実行しています。