From: Tom Lane Date: Wed, 30 May 2007 21:02:02 +0000 (+0000) Subject: Fix overly-strict sanity check in BeginInternalSubTransaction that made it X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=19cf7663fc74bce657203def2edab22f7119539f;p=users%2Fbernd%2Fpostgres.git Fix overly-strict sanity check in BeginInternalSubTransaction that made it fail when used in a deferred trigger. Bug goes back to 8.0; no doubt the reason it hadn't been noticed is that we've been discouraging use of user-defined constraint triggers. Per report from Frank van Vugt. --- diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 016b28974d..c448bcaa20 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -2935,9 +2935,10 @@ RollbackToSavepoint(List *options) /* * BeginInternalSubTransaction * This is the same as DefineSavepoint except it allows TBLOCK_STARTED - * state, and therefore it can safely be used in a function that might - * be called when not inside a BEGIN block. Also, we automatically - * cycle through CommitTransactionCommand/StartTransactionCommand + * and TBLOCK_END states, and therefore it can safely be + * used in functions that might be called when not inside a BEGIN block + * or when running deferred triggers at COMMIT time. Also, it + * automatically does CommitTransactionCommand/StartTransactionCommand * instead of expecting the caller to do it. */ void @@ -2949,6 +2950,7 @@ BeginInternalSubTransaction(char *name) { case TBLOCK_STARTED: case TBLOCK_INPROGRESS: + case TBLOCK_END: case TBLOCK_SUBINPROGRESS: /* Normal subtransaction start */ PushTransaction(); @@ -2966,7 +2968,6 @@ BeginInternalSubTransaction(char *name) case TBLOCK_DEFAULT: case TBLOCK_BEGIN: case TBLOCK_SUBBEGIN: - case TBLOCK_END: case TBLOCK_SUBEND: case TBLOCK_ABORT: case TBLOCK_SUBABORT: