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
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral