On 16-09-2016 13:30, siste...@mvsoftware.com.br wrote:
> 2016-09-16 11:04 GMT-03:00  <siste...@mvsoftware.com.br>:
>>
>> Então Alex, o detalhe é que vão existir muitos erros (indefinidos) que
>> vou
>> tratar com o tempo e durante esse tempo tenho que manter os OK
> 
>> Pressuponho que já tenhas estudado 40.6.6. Trapping Errors em
>> https://www.postgresql.org/docs/9.5/static/plpgsql-control-structures.html
>>
> 
> 
> Então Dutra, como ja percebeu eu não sou DBA, rsrs, minha rotina não é
> em PL dentro do banco
> 
Você viu o link acima? Ele explica que você pode pegar qualquer erro e
tratar numa exceção (é claro que isso tem um custo). Vide o exemplo abaixo:

DROP TABLE IF EXISTS foo;
DROP TABLE IF EXISTS bar;
DROP FUNCTION IF EXISTS foobar();

CREATE TABLE foo (a int, b int);
CREATE TABLE bar (a int, b int, check(a % 2 = 0));

CREATE FUNCTION foobar() RETURNS void AS $$
DECLARE
        r record;
BEGIN
        FOR r IN SELECT a, b FROM foo LOOP
                BEGIN
                        INSERT INTO bar (a, b) VALUES(r.a, r.b);
                EXCEPTION WHEN OTHERS THEN
                        RAISE NOTICE 'INSERT falhou (%, %)', r.a, r.b;
                END;
        END LOOP;
END;
$$
LANGUAGE plpgsql;

INSERT INTO foo (a, b) SELECT i, i + 3 FROM generate_series(1, 5000) i;

SELECT foobar();

A cada tentativa de inserir um valor ímpar da tabela foo na tabela bar
haverá uma falhar da restrição CHECK. A função foobar trata essa exceção
não fazendo nada (apenas imprime a mensagem de falha). E assim, ele vai
inserindo na tabela bar somente valores da coluna 'a' que são números pares.

> Uma pergunta, sem antes ter testado, rsrs, será que um PREPARE SQL antes
> de cada Insert ou Update me traria o erro antes de efetivar?
> 
Não. PREPARE tem haver com separar as fases de execução de um único comando.


-- 
   Euler Taveira                   Timbira - http://www.timbira.com.br/
   PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a