[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