From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | "jvenegasperu (dot)" <jvenegasperu(at)gmail(dot)com> |
Cc: | Ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Escribir regla como un Trigger |
Date: | 2017-12-04 18:42:29 |
Message-ID: | 20171204184229.m3mkjaskiwrf6ewd@alvherre.pgsql |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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
From | Date | Subject | |
---|---|---|---|
Next Message | jvenegasperu . | 2017-12-04 20:01:20 | Re: Escribir regla como un Trigger |
Previous Message | Anthony Sotolongo | 2017-12-04 17:59:14 | Re: Escribir regla como un Trigger |