On Fri, 2005-12-16 at 17:36, Jaime Casanova wrote:
> Hi,
> 
> recently someone show us this code in the spanish list...
> 
> > BEGIN WORK;
> > INSERT INTO mitabla VALUES (1);
> >    BEGIN TRANSACTION;
> >     INSERT INTO mitabla VALUES (2);
> >     INSERT INTO mitabla VALUES (3);
> >    COMMIT TRANSACTION;
> > INSERT INTO mitabla VALUES (4);
> > ROLLBACK WORK;
> 
> this is clearly bad you can't use a begin transaction inside a
> transaction... but the user was expecting other results and because he
> receives no error (actually was a warning but he is sending the
> commands via an external application)...
> 
> he was expecting an empty table but instead he gets this:
> 
> mitabla
> ========
> 1
> 2
> 3
> (3 rows)
> 

I'm not entirely sure that it's relevant, but he should have actually
recieved all 4 rows in his query, since the "commit transaction" would
have committed the first three inserts, and the 4th insert should have
gone in via auto-commit. So if he really got this result, his external
application is doing something extra here for him. Which might be the
point, emulating non-autocommit through an interface would be harder if
multiple begin's tossed an error. I'm sure other reasons have been
brought up as well. 

> so, why BeginTransactionBlock emits just a warning and not an error?
> this is not the same as in the case of the one who was closing and
> already closed cursor?
> 

I might argue that closing a closed cursor should only emit a warning
and not an error... but perhaps someone else will jump in here. 


Robert Treat
-- 
Build A Brighter Lamp :: Linux Apache {middleware} PostgreSQL


---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster

Reply via email to