jvenegasperu . escribió:

> El 4 de diciembre de 2017, 13:42, Alvaro Herrera <alvhe...@alvh.no-ip.org>
> escribió:

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

Seguro.

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

Ok.

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

De QGIS no tengo idea.

> 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?.

No creo que la idea de quitar y poner restricciones sea operacionalmente
lo mejor.  Considera la idea que te sugiero: en vez de que la aplicación
haga INSERT directamente, usa una función en plpgsql que tenga un bloque
algo así como

   BEGIN
      INSERT INTO ... ( ... )
   EXCEPTION WHEN EXCLUSION_VIOLATION THEN
     RAISE NOTICE 'no insertamos nada porque ya había algo';
     RETURN NULL;
   END

-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Reply via email to