Re: Escribir regla como un Trigger

From: Anthony Sotolongo <asotolongo(at)gmail(dot)com>
To: "jvenegasperu (dot)" <jvenegasperu(at)gmail(dot)com>, Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Escribir regla como un Trigger
Date: 2017-12-04 17:59:14
Message-ID: 874a5e4f-3048-deea-c947-cb2b306a5348@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Jose, que bueno tener noticias que los aspectos que vienen en
PostgreSQL para un futuro, asi uno se puede preparar mejor, gracias

te comento más menos lo que debes hacer

Un trigger antes de insertar en la tabla ap_valvula que llame a una
función trigger que verifique tu condición y si esta condición se cumple
retornar un null (asi no se inserta en la tabla) o de lo contrario
retornar new, seria algo como esto, ajustarlo a tu escenario,:

--funcion trigger

CREATE FUNCTION funcion_vefiricadora() RETURNS trigger AS
$$

declare

contador integer:=0;

BEGIN

SELECT count(*) into contador
           FROM ap_valvula
          WHERE ap_valvula.the_geom ~= new.the_geom

if contador<>0  then

 raise notice 'no se puede grabar porque la geometria %,  esta
duplicada' , new.the_geom;

  return null;

end if;

return new;

END;
$$ LANGUAGE plpgsql;

--trigger

CREATE TRIGGER tgr_ap_valula_ins
BEFORE INSERT
ON ap_valvula
FOR EACH ROW
EXECUTE PROCEDURE funcion_vefiricadora();

Saludos

On 04/12/17 14:28, jvenegasperu . wrote:
> Buen dia a todos
>
> recientemente conversando con Jaime Casanova me entere que hay una
> propuesta para retirar las reglas de postgres y que muy probablemente
> sera adoptada.
>
> De hecho yo actualmente tengo un problema con una regla en postgres
> 10.1 cuando es usada desde QGis 2.18
>
> 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;
>
> Pero cuando lo intento desde QGIS me da este mensaje de error
>
> "Necesita un regla incondicional ON INSERT DO INSTEAD con una cláusula
> RETURNING"
>
> Jaime me sugirio mejor escribir la regla como trigger pero no se como
> hacerlo haber quien me hecha una mano o un cable jeje para escribir
> esto como trigger
>
> la idea es que si alguien al dibujar en QGIS repite el mismo dibujo el
> segundo sea descartado automaticamente si se trata exactamente de las
> mismas coordenadas u otros criterios de campos que se puedan comparar.
>
> esta reglas seria un trigger que se ejecutaria antes de insertar y
> devolveria null o un mensaje que diga "no se puede grabar porque la
> geometria esta duplicada".
>
> Gracias por la ayuda que me puedan brindar.
>
> Atte
>
> Jose
>
>
>
>
>
>
>
>
>
>
>
> --
> José Mercedes Venegas Acevedo
> cel Mov RPC 964185205
>
> Member of the PHP Documentation Group (Spanish)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2017-12-04 18:42:29 Re: Escribir regla como un Trigger
Previous Message mauricio pullabuestan 2017-12-04 17:57:29 Herramienta de monitoreo PG Budget