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)
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 |