diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index b57cd042992551aa5ecf7437fb3aae547316e573..bc7716374d79d347fe3129571a901a340090ee69 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -3612,7 +3612,24 @@ AbortOutOfAnyTransaction(void) switch (s->blockState) { case TBLOCK_DEFAULT: - /* Not in a transaction, do nothing */ + if (s->state == TRANS_DEFAULT) + { + /* Not in a transaction, do nothing */ + } + else + { + /* + * We can get here after an error during transaction start + * (state will be TRANS_START). Need to clean up the + * incompletely started transaction. First, adjust the + * low-level state to suppress warning message from + * AbortTransaction. + */ + if (s->state == TRANS_START) + s->state = TRANS_INPROGRESS; + AbortTransaction(); + CleanupTransaction(); + } break; case TBLOCK_STARTED: case TBLOCK_BEGIN: