Re: what happens if a failed transaction is not rolled back?

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
Cc: David Wheeler <hippysoyboy(at)gmail(dot)com>, Siddharth Jain <siddhsql(at)gmail(dot)com>, pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: what happens if a failed transaction is not rolled back?
Date: 2023-04-24 21:20:13
Message-ID: 548096.1682371213@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

"David G. Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com> writes:
> On Mon, Apr 24, 2023 at 12:56 PM David Wheeler <hippysoyboy(at)gmail(dot)com>
> wrote:
>> Now I’m curious. Does it have the same impact on performance that an idle
>> in transaction connection has? Eg does it prevent vacuum? Does it still
>> hold locks?

> Absent documentation to the contrary I would expect the system to at best
> be in an idle-in-transaction state as-if the failed command never was
> executed.

A quick experiment will show you that we release locks as soon as the
transaction is detected to have failed. I believe the same is true of
other interesting resources such as snapshots (which'd be what affects
vacuum) but it's less easy to observe that from the SQL level. At least
by intention, a failed transaction won't hold any resources that would
impact other sessions.

> The concept of savepoints, whether in use in a particular
> transaction, would require at least that much state be preserved.

Of course, we can't release resources that were acquired by a still-live
subtransaction, a/k/a savepoint.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Arquimedes Aguirre 2023-04-24 22:00:58 RE: FW: Error!
Previous Message David G. Johnston 2023-04-24 20:24:06 Re: what happens if a failed transaction is not rolled back?