st_intersects
新しいエントリが名前と一致し、postgis ライブラリを使用して一致する既存の行と交差するかどうかを単純にチェックするテーブルのルールがあります。
一部しか挿入されていないように見えますが、ほとんどはこのルールを通過します。挿入後にいくつかのエントリを手動で確認したところ、ルールがその挿入をブロックするはずだったことが確認できました。
私のルールに何か問題がありますか?
テーブルには 3 つの列があります。id serial
、name varchar(200)
およびway geometry(Linestring,4326)
そして、私のルールは次のとおりです(\d名からの抜粋)
blockduplicate AS
ON INSERT TO nameslist
WHERE (EXISTS ( SELECT 1
FROM nameslist
WHERE nameslist.name::text = new.name::text AND st_intersects(nameslist.way, new.way) = true)) DO INSTEAD NOTHING
このテーブルは単に名前を持つ行を取り、別のエントリが同じ名前で入ってきて、同じ名前を持つ別の既存のエントリと交差するたびに、ブロックする必要があります。したがって、ジオメトリ フィールド ウェイで表される領域には、この名前のエントリが 1 つしかありません。挿入後、多くの重複が表示されます(フィールドをチェックすると、名前が一致してst_intersects
戻ります)。ルールが挿入をブロックしないのはなぜですか?true
way
更新: 1 つのクエリで複数の挿入を行うためですか。実際に、クエリINSERT INTO (a,b,c) VALUES (...),(...),(...),...
Does PostgreSQL call the RULE for each value?で 1 ショットで 12000 エントリを挿入します。複数の挿入を行う必要があります。そうしないと、挿入を完了するのに数か月かかります。