Antes de nada obrigada pela vossas respostas.

Efectivamente, Flavio, o esquema "tg_table_schema" não existe. Só depois
buscando um pouco mais encontrei que tinha de por a sentencia SQL ALTER
TABLE assim:

EXECUTE 'ALTER TABLE ' || quote_ident(esquema) || '.' ||
quote_ident(tabela) || ' ADD COLUMN area bigint';

E de esta maneira já reconhecia o esquema e nome da tabela.

Tiago, com EXECUTE IMMEDIATE da-me um erro de sintasis:

EXECUTE IMMEDIATE 'ALTER TABLE ' || quote_ident(esquema) || '.' ||
quote_ident(tabela) || ' ADD COLUMN area bigint';
ERROR: error de sintaxis en o cerca de «IMMEDIATE»

OK, agora sem o 'IMMEDIATE' a função é criada com êxito mas quando se
executa salta o seguinte erro:

ERROR:  no se puede hacer ALTER TABLE en «postfire_study_area» porque está
siendo usada por consultas activas en esta sesión
CONTEXTO:  sentencia SQL: «ALTER TABLE sch_forestal.postfire_study_
area ADD COLUMN area bigint»

Claro a função dispara quando faço um update ou insert na tabela e tem de
calcular a 'area' e o 'perimetro' para os registos afectados. Mas se estes
campos não existem deveriam ser criados e depois actualizados. O problema
parece ser que não se pode criar os campos tendo a tabela um insert ou
update em curso. Isto é mesmo assim ou existe uma maneira de contornar este
problema?

Obrigado!

Eloi Ribeiro
GIS Analyst
39,45º -0,40º
flavors.me/eloiribeiro


No dia 15 de Março de 2012 00:49, Tiago Adami <adam...@gmail.com> escreveu:

> Em 12 de março de 2012 07:11, Eloi Ribeiro <eloi.ribe...@gmail.com>
> escreveu:
> > 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?
>
> Se bem entendi, queres adicionar uma coluna à tabela quando ela não
> existir. Já tentou mudar o seu ALTER TABLE explícito por:
>
> EXECUTE IMMEDIATE 'ALTER TABLE TG_TABLE_SCHEMA.TG_TABLE_NAME ADD
> COLUMN area bigint';
>
> ?
>
> --
> TIAGO J. ADAMI
> http://www.adamiworks.com
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a