<div dir="ltr"><div><div><div><div><div><div><div><div>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:<br><br></div>¿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.<br><br></div>Estoy intentando hacerlo con trigger.<br><br></div>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.<br><br></div>La función disparadora es esta:<br><br>CREATE OR REPLACE FUNCTION prueba.verificar()<br> RETURNS trigger AS<br>$BODY$<br><br>DECLARE<br><br>verificar geometry;<br><br> BEGIN <br> 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) <br> AND prueba.sector_1.id_user = prueba.relevamiento_1.NEW.id_user);<br> IF verificar IS NULL THEN<br> RAISE EXCEPTION 'geom vacio';<br> END IF;<br> <br> IF verificar is NOT NULL THEN<br> INSERT INTO prueba.relevamiento_1<br> (gid, id, pisos, destino, pbcomercio, retiro_lm, en_obra, geom, id_user)<br> VALUES<br> (NEW.gid, NEW.id, NEW.pisos, NEW.destino, NEW.pbcomercio, NEW.retiro_lm, NEW.en_obra, NEW.geom, NEW.id_user);<br> END IF;<br> RETURN NEW;<br> END;<br>$BODY$<br> LANGUAGE plpgsql VOLATILE<br> COST 100;<br>ALTER FUNCTION prueba.verificar()<br> OWNER TO admin;<br><br></div>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<br><br></div>Este es el Trigger:<br><br>CREATE TRIGGER relevamiento_insert_trigger<br> BEFORE INSERT<br> ON prueba.relevamiento_1<br> FOR EACH ROW<br> EXECUTE PROCEDURE prueba.verificar();<br><br></div>Y este el error :(<br><br>ART ERROR: cross-database references are not implemented: prueba.relevamiento_1.new.geom at character 121<br><br>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)<br><br>ART CONTEXT: PL/pgSQL function verificar() line 8 at assignment<br><br></div>Alguna Sugerencia?<br><div><br></div></div>