Pessoal,
Estou executando uma funcao em plpgsql e no meio da execucao dessa
funcao, erros podem acontecer, porem, preciso que ela continue o laço de
execucao mesmo assim.
O problema é que eu nao estou conseguinto tratar o erro, tipo, nao
sei nem se é possivel fazer isso.
*** Segue o erro: ***
ERRO: sql error
DETAIL: ERRO: coluna "clilimite_operacional" da relação "cliente" já
existe
CONTEXT: comando SQL "SELECT dblink_exec('host=10.0.1.79 port=5432
user=postgres dbname='|| $1 ||' ', 'alter table cliente add column
clilimite_operacional boolean not null default false')"
PL/pgSQL function "teste" line 15 at SQL statement
*** Segue abaixo o exemplo: ***
CREATE OR REPLACE FUNCTION teste()
RETURNS integer AS
$BODY$
DECLARE
base text:='';
banco RECORD;
BEGIN
FOR banco IN SELECT datname from dblink('host=10.0.1.79 port=5432
user=postgres dbname=manutencao_bases', 'SELECT datname FROM pg_database
order by datname desc') as t1(datname text) LOOP
base := banco.datname;
IF base != 'mapas' AND base != 'template1' AND base !=
'template0' AND base != 'postgres' AND base != 'comando' AND base !=
'affere' AND base != 'manutencao_bases' THEN
BEGIN
SELECT dblink_exec('host=10.0.1.79 port=5432 user=postgres
dbname='||base||' ', 'alter table cliente add column
clilimite_operacional boolean not null default false');
EXCEPTION
WHEN invalid_sqlstate_returned THEN
RAISE EXCEPTION 'Deu Zica na parada';
END;
END IF;
END LOOP;
RETURN 1;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE ;
O problema esta na parte de execucao do "dblink_exec" porque a base que
eu quero dar manutencao ja pode ter o campo criado. É uma funcao que
ajuda na manutencao de varias bases.
Alguem poderia me ajudar?
Obrigado.
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral