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

Responder a