Re: Escribir regla como un Trigger

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

In response to

Responses

Browse pgsql-es-ayuda by date

  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