フィーチャをゼロでバッファリングすることは、マルセロが提案したように、shp ファイルでは非常に一般的な自己交差ポリゴンの既知の修正ですが、この目的のための ST_MakeValid 関数もあります。関連する関数 ST_IsValidReason もあり、やみくもに修正を試みるのではなく、問題がどこにあるかを通知します。
実際には、ST_MakeValid(geom) または ST_Buffer(geom, 0) のいずれかを使用すると、孤立したポイントやラインストリングを含むジオメトリ タイプが混在する可能性があります。したがって、返されたジオメトリ タイプをチェックして、たとえば、ST_MakeValid の結果のポリゴンのみを含めるようにすると、さらに洗練されます。
create table valid_geoms as
with make_valid (id, geom) as
(select
row_number() over() as id,
(ST_Dump(ST_MakeValid(geom))).geom as geom from invalid_table
)
select id, geom from make_valid where ST_GeometryType(geom)='ST_Polygon';
ここで、invalid_table は元の shp2pgsql インポートの結果のテーブルです。
ST_MakeValid は入力ジオメトリから複数のポリゴンを生成する可能性があるため、生成された ID をここに含めます。元の id フィールドを含むようにクエリを書き直すことはできますが、一意であることが保証されなくなりました。