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

Responder a