Skip site navigation (1) Skip section navigation (2)

Re: Bug in psql (on_error_rollback)

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Michael Paesold <mpaesold(at)gmx(dot)at>
Cc: pgsql-patches(at)postgresql(dot)org
Subject: Re: Bug in psql (on_error_rollback)
Date: 2005-09-20 21:44:13
Message-ID: 200509202144.j8KLiDP10810@candle.pha.pa.us (view raw or flat)
Thread:
Lists: pgsql-patches
Good patch. You are right that the original code did not consider that
AUTOCOMMIT would change the transaction state seen by the
ON_ERROR_ROLLBACK check.

Fixed in CVS.  ON_ERROR_ROLLBACK was not in 8.0.X so no need to backpatch.

---------------------------------------------------------------------------

Michael Paesold wrote:
> There is a bug in psql for the new ON_ERROR_ROLLBACK feature. In AUTOCOMMIT 
> off mode it does not work correctly for the first statement.
> 
> This is how it works usually:
> ====================================
> postgres=# \set AUTOCOMMIT off
> postgres=# \set ON_ERROR_ROLLBACK interactive
> postgres=# SELECT 1;
>  ?column?
> ----------
>         1
> (1 row)
> 
> postgres=# SELECT a;
> ERROR:  column "a" does not exist
> postgres=# SELECT 1;
>  ?column?
> ----------
>         1
> (1 row)
> 
> postgres=# BEGIN;
> WARNING:  there is already a transaction in progress
> BEGIN
> postgres=# ROLLBACK;
> ROLLBACK
> ====================================
> 
> For the first statement in a transaction after the implicit BEGIN it does 
> not work:
> ====================================
> postgres=# ROLLBACK;
> ROLLBACK
> postgres=#
> postgres=# SELECT a;
> ERROR:  column "a" does not exist
> postgres=# SELECT 1;
> ERROR:  current transaction is aborted, commands ignored until end of 
> transaction block
> ====================================
> 
> With the attaced patch it works correctly even for the first statement.
> ====================================
> postgres=# \set AUTOCOMMIT off
> postgres=# \set ON_ERROR_ROLLBACK interactive
> postgres=# SELECT a;
> ERROR:  column "a" does not exist
> postgres=# SELECT 1;
>  ?column?
> ----------
>         1
> (1 row)
> 
> postgres=# BEGIN;
> WARNING:  there is already a transaction in progress
> BEGIN
> postgres=# ABORT;
> ROLLBACK
> ====================================
> 
> Please check the patch and apply to CVS tip.
> I think it would be good to add regression tests for AUTOCOMMIT and 
> ON_ERROR_ROLLBACK and possibly others. There are currently no regression 
> tests specifically for psql features, but since the regression tests are 
> executed via psql, there would be no problem in creating a set of such 
> tests, right?. I could write some.
> 
> Best Regards,
> Michael Paesold 

[ Attachment, skipping... ]

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

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman(at)candle(dot)pha(dot)pa(dot)us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

In response to

pgsql-patches by date

Next:From: Tom LaneDate: 2005-09-20 21:55:52
Subject: Re: Multiple -t options for pg_dump
Previous:From: Alvaro HerreraDate: 2005-09-20 19:07:19
Subject: Re: Multiple -t options for pg_dump

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group