On Thu, Jan 1, 2026 at 10:01 PM Daniil Davydov <3danissimo@gmail.com> wrote:
>
> On Wed, Dec 31, 2025 at 9:32 AM Chao Li <li.evan.chao@gmail.com> wrote:
> >
> > You’re right that during CREATE_REPLICATION_SLOT, SnapBuildFindSnapshot() ensures we don’t miss PREPARE records for
preparedtransactions that exist at creation time.
> >
> > 1462aad2e introduced support for altering logical replication slot options, including two_phase, after the slot has
beencreated. The commit comment says:
> > ```
> > Changing the 'two_phase' option for a subscription from 'true' to 'false'
> > is permitted only when there are no pending prepared transactions
> > corresponding to that subscription. Otherwise, the changes of already
> > prepared transactions can be replicated again along with their corresponding
> > commit leading to duplicate data or errors.
> > ```
> >
> > true->false is not allowed, however false->true is permitted. So, I think the old comment is still possible today:
> > ```
> > * Note that enabling this option after decoding has already advanced
> > * may result in missing PREPARE records for transactions that were
> > * prepared before the option was enabled.
> > ```
> >
>
> Hm, I still can't understand why the comment that you provided is correct.
>
> How can we "miss PREPARE records" if slot creation requires all prepared
> transactions to finish? The commit message says about risks during the
> change of the parameter "on the fly". But we are dealing with slot creation.
>
The point is about changing the two_phase property of slot after
slot_creation which we carefully change for slots related to
subscription. So, if we don't take necessary precautions then enabling
it on the fly could lead to the problem Chao is worried about.
--
With Regards,
Amit Kapila.