我有一个表规则,它只检查新条目是否与名称匹配,并与使用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
该表只取一行具有名称的行,并且每当另一个具有相同名称的条目进入并与另一个具有相同名称的现有条目相交时,它应该被阻止。所以我在几何字段方式表示的区域中只有一个具有此名称的条目。插入后,我看到很多重复项(名称匹配并在检查字段时st_intersects
返回)。为什么我的规则没有阻止插入?true
way
更新:是不是因为我在一个查询中进行了多次插入。我实际上在一次使用查询中插入了 12000 个条目INSERT INTO (a,b,c) VALUES (...),(...),(...),...
PostgreSQL 是否为每个值调用规则?我需要进行多次插入,否则完成插入需要几个月的时间。