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)

Reply via email to