Re: Skipping logical replication transactions on subscriber side

Amit Kapila <amit.kapila16@gmail.com>

From: Amit Kapila <amit.kapila16@gmail.com>
To: Masahiko Sawada <sawada.mshk@gmail.com>
Cc: Peter Eisentraut <peter.eisentraut@enterprisedb.com>, "houzj.fnst@fujitsu.com" <houzj.fnst@fujitsu.com>, vignesh C <vignesh21@gmail.com>, Greg Nancarrow <gregn4422@gmail.com>, "tanghy.fnst@fujitsu.com" <tanghy.fnst@fujitsu.com>, "osumi.takamichi@fujitsu.com" <osumi.takamichi@fujitsu.com>, Alexey Lesovsky <lesovsky@gmail.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2021-12-09T09:16:13Z
Lists: pgsql-hackers
On Thu, Dec 9, 2021 at 2:24 PM Masahiko Sawada <sawada.mshk@gmail.com> wrote:
>
> On Thu, Dec 9, 2021 at 11:47 AM Amit Kapila <amit.kapila16@gmail.com> wrote:
> >
> > I am thinking that we can start a transaction, update the catalog,
> > commit that transaction. Then start a new one to update
> > origin_lsn/timestamp, finishprepared, and commit it. Now, if it
> > crashes after the first transaction, only commit prepared will be
> > resent again and this time we don't need to update the catalog as that
> > entry would be already cleared.
>
> Sounds good. In the crash case, it should be fine since we will just
> commit an empty transaction. The same is true for the case where
> skip_xid has been changed after skipping and preparing the transaction
> and before handling commit_prepared.
>
> Regarding the case where the user specifies XID of the transaction
> after it is prepared on the subscriber (i.g., the transaction is not
> empty), we won’t skip committing the prepared transaction. But I think
> that we don't need to support skipping already-prepared transaction
> since such transaction doesn't conflict with anything regardless of
> having changed or not.
>

Yeah, this makes sense to me.

-- 
With Regards,
Amit Kapila.



Commits

  1. Test ALIGNOF_DOUBLE==4 compatibility under ALIGNOF_DOUBLE==8.

  2. Reorder subskiplsn in pg_subscription to avoid alignment issues.

  3. Add ALTER SUBSCRIPTION ... SKIP.

  4. Optionally disable subscriptions on error.

  5. Update docs of logical replication for commit 8d74fc96db.

  6. Respect permissions within logical replication.

  7. Fix regression test failure caused by commit 8d74fc96db.

  8. Add a view to show the stats of subscription workers.

  9. Add logical change details to logical replication worker errcontext.

  10. Rename LOGICAL_REP_MSG_STREAM_END to LOGICAL_REP_MSG_STREAM_STOP.

  11. Fix typo in protocol.sgml.

  12. Remove unused argument in apply_handle_commit_internal().

  13. Fix replication of in-progress transactions in tablesync worker.

  14. Reorder pg_sequence columns to avoid alignment issue