boa tarde Flavio
obrigado pela resposta. vi um exemplo na internet e queria ver se acha
que é possivel:
neste caso se desse no primeiro ou no segundo insert(timeout por
exemplo) ele daria erro de exception e gravaria esse log?

  if (tg_op = 'insert') then

if (teste = '1' ) then
insert into mensagem(status, result, new.idmensagem, datahoraenvio)
SELECT status, result, new.idmensagem, CURRENT_TIMESTAMP
from http_get('www.terra.com.br <http://www.terra.com.br> '');
END IF;
if (teste = '2' ) then
insert into mensagem(status, result, new.idmensagem, datahoraenvio)
SELECT status, result, new.idmensagem, CURRENT_TIMESTAMP
from http_get('www.terra.com.br <http://www.terra.com.br> '');
END IF;
return new;

    END IF;

    RAISE EXCEPTION '%', mensagem;
    insert into mensagem(status, result, idmensagem, datahoraenvio)
values(0, SQLSTATE || SQLERRM || _query, new.idmensagem,
CURRENT_TIMESTAMP);
    RETURN NULL;

Isso *não* vai funcionar.
Em caso de excessão, toda a transação sofrerá um ROLLBACK, inclusive seu INSERT na tabela "mensagem" que você está tentando.

Suas alternativas são o que eu respondi antes (log para CSV e importação desse log ou FDW sobre ele). Uma terceira alternativa seria usar DBLINK pro insert que não será transacional e o ROLLBACK não afeta.

[]s
Flavio Gurgel
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a