Ola a todos,
Estou a fazer a seguinte função para que me actualize o campo 'area' cada
vez que exista um INSERT ou UPDATE numa tabela.
O problema está que o campo 'area' pode não existir e gostava que nesse
caso o campo seja criado e preenchido para todos os registos.
Como tenho salta-me o erro de que 'Nao existe o esquema «tg_table_schema»'
e não encontro maneira de resolver isso.
Como faço para adicionar um campo à tabela onde dispara a função e se
preencha esse campo?
Sugestões são bem vindas.
Obrigado de ante-mão.
CREATE OR REPLACE FUNCTION fun_dimensoes()
RETURNS trigger AS
$BODY$
DECLARE
tipo varchar(20);
srid integer;
BEGIN
tipo = (SELECT "type" FROM geometry_columns
WHERE f_table_schema = TG_TABLE_SCHEMA
AND f_table_name = TG_TABLE_NAME);
srid = (SELECT srid FROM geometry_columns
WHERE f_table_schema = TG_TABLE_SCHEMA
AND f_table_name = TG_TABLE_NAME);
IF (tipo = 'POLYGON' OR tipo = 'MULTIPOLYGON') THEN
IF NOT EXISTS(SELECT column_name FROM information_schema.columns
WHERE table_schema = TG_TABLE_SCHEMA
AND table_name = TG_TABLE_NAME
AND column_name='area') THEN
*ALTER TABLE TG_TABLE_SCHEMA.TG_TABLE_NAME ADD COLUMN area
bigint;*
IF (srid = 23030 OR srid = 25830) THEN
*UPDATE TG_TABLE_SCHEMA.TG_TABLE_NAME SET area =
ST_Area(geom)::bigint;*
ELSIF (srid = 4326) THEN
*UPDATE TG_TABLE_SCHEMA.TG_TABLE_NAME SET area =
ST_Area(Geography(geom))::bigint;*
END IF;
ELSE
IF (srid = 23030 OR srid = 25830) THEN
NEW.area = ST_Area(NEW.geom)::bigint;
ELSIF (srid = 4326) THEN
NEW.area = ST_Area(Geography(NEW.geom))::bigint;
END IF;
END IF;
END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
CREATE TRIGGER trg_postfire_study_area_UPDATE_dimensoes
BEFORE INSERT OR UPDATE
ON sch_forestal.postfire_study_area
FOR EACH ROW
EXECUTE PROCEDURE fun_dimensoes();
Quando edito a geometria salta o seguinte erro:
ERROR: no existe el esquema «tg_table_schema»
CONTEXTO: sentencia SQL: «ALTER TABLE TG_TABLE_SCHEMA.TG_TABLE_NAME ADD
COLUMN area bigint»
Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral