Tom Lane... Tenho que falar com este cara... Pra pedir desculpas por ter 
levantado a hipótese de o Postgres estar com erro, hehehe.

Respondendo ao Flávio, Leandro, Danilo e Mello.

Bom, então o problema deve estar na maneira como faço.

Uso clarion 6.1 e acesso o postgres via odbc. Segue uma rotina simples de 
exclusão de uma venda:

vendas{Prop:SQL}='BEGIN TRANSACTION'
...ven:numero_venda=1
...if access:vendas.tryfetch(ven_numero)
......vendas{Prop:SQL}='ROLLBACK TRANSACTION'
......message('Não encontrei esta venda')
......exit
...end
...vendas{Prop:SQL}='DELETE FROM vendas_produtos WHERE numero_venda=1'
...if Checa_Erro(Loc:Mensagem)=true
......vendas{Prop:SQL}='ROLLBACK TRANSACTION'
......message(Loc:Mensagem)
......exit
...end
...vendas{Prop:SQL}='DELETE FROM vendas_parcelas WHERE numero_venda=1'
...if Checa_Erro(Loc:Mensagem)=true
......vendas{Prop:SQL}='ROLLBACK TRANSACTION'
......message(Loc:Mensagem)
......exit
...end
...if relate:vendas.delete(0)
......vendas{Prop:SQL}='ROLLBACK TRANSACTION'
......message('Não consegui excluir a venda')
......exit
...end
vendas{Prop:SQL}='COMMIT TRANSACTION'

Checa_Erro(*cstring),byte ! função checa_erro
if fileerrorcode()>0
...Par:Mensagem=clip(left(fileerror()))
...if Par:Mensagem='' and errorcode()>0
......Par:Mensagem=clip(left(error()))
...end
...return true
end
if errorcode()>0
...Par:Mensagem=clip(left(error()))
...return true
end
return false

Realmente eu envio vários scripts dentro da transação, mas mesmo assim, se eu 
substituir o COMMIT do final pelo ROLLBACK, ou colocar o ROLLBACK em algum 
ponto da rotina, o postgres cancela toda a transação.

Agora vamos imaginar que exista relacionado à tabela vendas a tabela 
vendas_observacoes e eu tenha esquecido de excluir, vai dar erro de 
relacionamento. Neste caso, a função delete(0) do clarion mostra uma mensagem 
de erro, a aplicação mostra a mensagem 'Não consegui excluir a venda', o que me 
faz concluir que o ROLLBACK foi enviado, porém, nesta situação, a transação não 
é cancelada, os produtos e as parcelas ficam excluídas, e a venda incompleta.

Pode ser um problema do clarion, ou a maneira como estou programando. Alguma 
idéia do que pode ser?

Muito obrigado.

Ronei





    Se você achar um bug como esses, numa funcionalidade básica do banco
    de dados, justamente no PostgreSQL, tenho certeza que o Tom Lane te
    manda alguns dólares de prêmio lá dos EUA direto na sua conta
    bancária.

    []s
    Flavio Gurgel

    _______________________________________________
    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

Responder a