jvenegasperu . escribió:

> Si yo uso la regla usando pgadmin funciona bien y no me permite insertar
> una nueva geometria de tipo punto cuando se trata de las mismas coordenadas.
> 
> Esta es la regla
> 
> CREATE OR REPLACE RULE ed_ap_valvula AS
>     ON INSERT TO ap_valvula
>    WHERE 0 <> (( SELECT count(*) AS count
>            FROM ap_valvula
>           WHERE ap_valvula.the_geom ~= new.the_geom))
> DO INSTEAD NOTHING;

Lo que realmente te hace falta, creo, es una restriccion EXCLUDE, que
debería ser algo así:

ALTER TABLE ap_valvula ADD CONSTRAINT no_misma_geom
   EXCLUDE (the_geom WITH ~=);

Quizás alguien pueda proveer un ejemplo más completo (yo no tengo
postgis disponible aquí); pero la idea es que no usas triggers ni reglas
sino que la restricción misma se hace cargo del problema.

Ahora, tu regla no *impide* que se inserte el objeto (yo esperaría que
eso arrojara un error), sino que más bien no inserta nada cuando el
insert va a una geometría donde ya hay un objeto.  Usando EXCLUDE va a
arrojar un error.  Pero podrías atraparlo usando plpgsql y un bloque
exception, que de todas formas va a ser más simple de implementar que
una regla o un trigger ...

-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Reply via email to