Gracias por responder tan pronto les comento entre lineas El 4 de diciembre de 2017, 13:42, Alvaro Herrera <alvhe...@alvh.no-ip.org> escribió:
> 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. > Alvaro es posible que la restriccion use menos recursos y por ende sea una solución mas optima? > 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. Tienes razon Alvaro la razon por la que la regla solo devolvia Null era porque yo la usaba cuando migraba datos en batch y eran miles y a mi simplemente me interesaba que no se dupliquen sin avisar del error simplemente se descartaban duplicados. Usandola desde QGIs estaba funcionando bien hasta que en la version 2.18. dejo de funcionar enviando el error "Necesita un regla incondicional ON INSERT DO INSTEAD con una cláusula RETURNING" Eso me lleva a pensar que si implemento la restricción y despues quiero importar datos tendre que quitarla temporalmente porque la excepcion paralizaria el trabajo?. > 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 ... > y con respecto a esto de atrapar el error se puede poner un mensaje para devolver al momento de crear la restriccion para que sea eso lo que se muestre en la vista de mensajes de QGis en lugar del mensaje por defecto? saludos > > -- > Álvaro Herrera https://www.2ndQuadrant.com/ > PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services > -- José Mercedes Venegas Acevedo cel Mov RPC 964185205 Member of the PHP Documentation Group (Spanish)