Tom Lane wrote:
> Andrew Dunstan <andrew@dunslane.net> writes:
> > Could we maybe have some flavor of ROLLBACK that doesn't issue a warning
> > if no transaction is in progress? There is precedent for this sort of
> > facility - DROP ... IF EXISTS.
>
> Something that would actually be doable for 8.3 would be to downgrade
> this particular WARNING to a NOTICE. A DBA who hasn't got
> log_min_messages set higher than NOTICE hasn't really got a lot of room
> to whine about bulky logs.
I have developed the attached patch to implement this. I assume we want
to change ABORT outside a transaction from WARNING to NOTICE, but not
COMMIT.
--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://postgres.enterprisedb.com
+ If your life is a hard drive, Christ can be your backup. +
Index: src/backend/access/transam/xact.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/access/transam/xact.c,v
retrieving revision 1.251
diff -c -c -r1.251 xact.c
*** src/backend/access/transam/xact.c 11 Sep 2007 03:28:05 -0000 1.251
--- src/backend/access/transam/xact.c 9 Nov 2007 02:45:30 -0000
***************
*** 3025,3031 ****
* default state.
*/
case TBLOCK_STARTED:
! ereport(WARNING,
(errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION),
errmsg("there is no transaction in progress")));
s->blockState = TBLOCK_ABORT_PENDING;
--- 3025,3031 ----
* default state.
*/
case TBLOCK_STARTED:
! ereport(NOTICE,
(errcode(ERRCODE_NO_ACTIVE_SQL_TRANSACTION),
errmsg("there is no transaction in progress")));
s->blockState = TBLOCK_ABORT_PENDING;
Index: src/test/regress/expected/errors.out
===================================================================
RCS file: /cvsroot/pgsql/src/test/regress/expected/errors.out,v
retrieving revision 1.52
diff -c -c -r1.52 errors.out
*** src/test/regress/expected/errors.out 15 Apr 2006 17:45:46 -0000 1.52
--- src/test/regress/expected/errors.out 9 Nov 2007 02:45:31 -0000
***************
*** 116,122 ****
-- not in a xact
abort;
! WARNING: there is no transaction in progress
-- not in a xact
end;
WARNING: there is no transaction in progress
--- 116,122 ----
-- not in a xact
abort;
! NOTICE: there is no transaction in progress
-- not in a xact
end;
WARNING: there is no transaction in progress