Senhores(as),

Tenho a seguinte situação (a grosso modo):

BEGIN TRANSACTION;
INSERT INTO vendas (...);
if errorfile() then ROLLBACK TRANSACTION; exit.(Isso na minha aplicação)
INSERT INTO vendas_produtos (...);
if errorfile() then ROLLBACK TRANSACTION; exit.
INSERT INTO vendas_produtos (...);
if errorfile() then ROLLBACK TRANSACTION; exit.
INSERT INTO vendas_produtos (...);
if errorfile() then ROLLBACK TRANSACTION; exit.
INSERT INTO vendas_parcelas (...);
if errorfile() then ROLLBACK TRANSACTION; exit.
INSERT INTO vendas_parcelas (...);
if errorfile() then ROLLBACK TRANSACTION; exit.
COMMIT TRANSACTION;

Funciona blz.

Se eu trocar o COMMIT pelo ROLLBACK, toda a transação é cancelada. Blz.

Mas se acontecer um erro a nível de postgres, tipo, inserindo o registro em 
vendas_parcelas com um campo inexistente na tabela, o postgres retorna um erro, 
mas mesmo eu enviando um ROLLBACK, o que já foi gravado fica gravado, a venda 
fica incompleta. Ou seja, quando há algum erro de dados que eu detecto na minha 
aplicação, envio um ROLLBACK e toda a operação é cancelada, mas quando ocorre 
um erro de sintaxe ou outro equivalente, o ROLLBACK não cancela o que já foi 
gravado.

Isto tem causado alguns transtornos para mim e para meus clientes.

Porque isso acontece? Há uma solução pra isso?

Muito obrigado

Ronei
RH Sistemas
Postgres 8.3
Clarino 6.1
Windows XP
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a