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