Hi,
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.
--
Best regards,
Daniil Davydov