Robert Haas <robertmhaas@gmail.com> writes:
> On Wed, Dec 4, 2024 at 12:19 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
>> Could we fix it so ROLLBACK TRANSACTION removes the GID from the
>> list of prepared xacts that need to be written out? Then we'd
>> no longer have a pending requirement to read the broken WAL record.
> That would be nice, but I'm not sure that it's possible. As currently
> implemented, FinishPreparedTransaction() always reads the two-phase
> state data either from the two-phase file or the WAL, whether it's
> committing or rolling back.
I'm not following. FinishPreparedTransaction is not what's preventing
checkpoints or holding back the VACUUM horizon. What is doing that
is the in-memory fake PGPROC representing the prepared transaction
(I forget the exact terminology). I'm suggesting that we could have
some way to nuke one of those without properly cleaning up the
prepared xact. Maybe it'd need to be invoked via a different command
than ROLLBACK TRANSACTION.
regards, tom lane