ST_Differenceを使用して、PostGis 2.1(およびPostgres SQL 9.3)を使用する別のポリゴンのセット(test.single_geometry_1)でカバーされる領域を含まないポリゴンのセット(processing.trimmedparcelsnew)を作成しようとしています。これが私のクエリです:
CREATE TABLE processing.trimmedparcelsnew AS
SELECT
    orig.id, ST_Difference(orig.geom, cont.geom) AS difference
FROM 
    test.single_geometry_1 cont,
    test.multi_geometry_1 orig;しかし、結果のポリゴンはトリミングされておらず、代わりに他のレイヤーと交差する場所で分割されているようです。結果をテーブルに入れずにselectを実行するだけで、他に考えられるすべてのものを試しましたが、この関数を機能させることができません。
結果の写真を添付しました
コメントの後、WHERE句を追加してみました。交差のないパーセルと、他のパーセルの交差する領域を削除します(レイヤーtest.single_geometryは、パーセルから削除する汚染を表します)。交差を試してみましたが、もちろん実際には非交差が必要なので、分離を試行しています。また、テーブルにorigを追加しようとしましたが、ST_Difference(http://postgis.net/docs/ST_Difference.html)のドキュメントには、必要な正確なジオメトリ(ジオメトリAのその部分を表すジオメトリ)が返されると記載されていますはジオメトリB)と交差しないため、テーブルの元のポリゴンを代わりに使用する理由がわかりません。とにかく、ここに私の変更されたコードがあります:
CREATE TABLE processing.trimmedparcelsnew AS
SELECT
    orig.id, ST_Difference(orig.geom, cont.geom) AS difference, orig.geom AS geom
FROM 
    test.single_geometry_1 cont,
    test.multi_geometry_1 orig
WHERE ST_Disjoint(orig.geom, cont.geom);dbastonの回答に続いて、私は今試しました:
CREATE TABLE processing.parcels_trimmed AS
SELECT id, COALESCE(ST_Difference(geom, (SELECT ST_Union(b.geom) 
                                         FROM test.single_geometry_1 b
                                         WHERE ST_Intersects(a.geom, b.geom)
                                         AND a.id != b.id)), a.geom)
FROM test.multi_geometry_1 a;この結果は、test.multi_geometry_1のコピーです。現在は分割は行われていませんが。
以前のバージョンを試しましたが、もう一度test.multi_geometry_1のコピーを取得します。
CREATE TABLE processing.parcels_trimmed_no_coalesce AS
SELECT id, COALESCE(ST_Difference(geom, (SELECT ST_Union(b.geom) 
                                         FROM test.single_geometry_1 b
                                         WHERE ST_Intersects(a.geom, b.geom)
                                         AND a.id != b.id)), a.geom)
FROM test.multi_geometry_1 a;他に何か間違っているのではないかと思い始めています。次のステートメントは次のとおりです。
DROP TABLE IF EXISTS processing.parcels_trimmed_no_coalesce;そして、PostgreSQL SQLクエリウィンドウとOpenjumpからクエリを実行しています。
テーブルを表示するために使用するステートメントは次のとおりです。
SELECT * FROM processing.parcels_trimmed_no_coalesce;簡略化のために、このクエリを次のように減らしました。
SELECT id, COALESCE(ST_Difference(geom, (SELECT ST_Union(b.geom) 
                                         FROM test.geometriestocutagainst b
                                         WHERE ST_Intersects(a.geom, b.geom)
                                         AND a.id != b.id)), a.geom)
FROM test.geometriestocut a;これでも、望みの結果がtest.geometriestocutagainstに対してトリミングされた元の場合、元のポリゴン(test.geometriestocut)のみになります。

WHERE句を指定しなかったため、結果のテーブルに多項式展開がある可能性があります。trimmedparcelsnewいくつの行がありますか?