[Spanish] Restringir INSERT por area en Postgis

Javier Diaz javidiaz1977 at gmail.com
Mon Apr 20 10:03:03 PDT 2015


Buen dia lista. Estoy trabajando en un proyecto donde tengo aprox. 20
usuarios y cada uno debe cargar puntos en una area determinada y me surge
la siguiente duda:

¿Es posible limitar desde PostgreSQL/Postgis el area de carga de cada
usuario apartir de una geometria dada?, la misma podría ser los limites de
una manzana por ejemplo.

Estoy intentando hacerlo con trigger.

En una tabla (relevamiento_1) tengo los puntos que va a ir cargando cada
usuario. Y en la otra tabla (sector_1) tengo definidas las areas para cada
usuario.

La función disparadora es esta:

CREATE OR REPLACE FUNCTION prueba.verificar()
  RETURNS trigger AS
$BODY$

DECLARE

verificar geometry;

  BEGIN
    verificar = (SELECT prueba.sector_1.geom FROM prueba.sector_1,
prueba.relevamiento_1 WHERE ST_Contains(prueba.sector_1.geom,
prueba.relevamiento_1.NEW.geom)
    AND prueba.sector_1.id_user = prueba.relevamiento_1.NEW.id_user);
    IF verificar IS NULL THEN
            RAISE EXCEPTION 'geom vacio';
        END IF;

    IF verificar is NOT NULL THEN
        INSERT INTO prueba.relevamiento_1
        (gid, id, pisos, destino, pbcomercio, retiro_lm, en_obra, geom,
id_user)
        VALUES
        (NEW.gid, NEW.id, NEW.pisos, NEW.destino, NEW.pbcomercio,
NEW.retiro_lm, NEW.en_obra, NEW.geom, NEW.id_user);
    END IF;
    RETURN NEW;
  END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION prueba.verificar()
  OWNER TO admin;

NOTA: en la variable verificar estoy (intentando) almacenar el resultado de
la consulta. Y lo que suponia iba  a funcionar, era que si verificar era
null no hacia nada. Y si verificar almacenó la geom haga la insercción de
los nuevos datos en la tabla relevamiento_1

Este es el Trigger:

CREATE TRIGGER relevamiento_insert_trigger
  BEFORE INSERT
  ON prueba.relevamiento_1
  FOR EACH ROW
  EXECUTE PROCEDURE prueba.verificar();

Y este el error :(

ART ERROR:  cross-database references are not implemented:
prueba.relevamiento_1.new.geom at character 121

ART QUERY:  SELECT (SELECT prueba.sector_1.geom FROM prueba.sector_1,
prueba.relevamiento_1 WHERE ST_Contains(prueba.sector_1.geom,
prueba.relevamiento_1.NEW.geom) AND prueba.sector_1.id_user =
prueba.relevamiento_1.NEW.id_user)

ART CONTEXT:  PL/pgSQL function verificar() line 8 at assignment

Alguna Sugerencia?
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.osgeo.org/pipermail/spanish/attachments/20150420/99f87362/attachment.html>


More information about the Spanish mailing list