Re: Skipping logical replication transactions on subscriber side

Поиск
Список
Период
Сортировка
От Amit Kapila
Тема Re: Skipping logical replication transactions on subscriber side
Дата
Msg-id CAA4eK1LpbjYgEjK0=v+1wAyWQMXALPoh=BS5cQeFam7ye3rQKg@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Skipping logical replication transactions on subscriber side  (Peter Eisentraut <peter.eisentraut@enterprisedb.com>)
Ответы Re: Skipping logical replication transactions on subscriber side  (Masahiko Sawada <sawada.mshk@gmail.com>)
Re: Skipping logical replication transactions on subscriber side  (Peter Eisentraut <peter.eisentraut@enterprisedb.com>)
Список pgsql-hackers
On Thu, Dec 2, 2021 at 8:38 PM Peter Eisentraut
<peter.eisentraut@enterprisedb.com> wrote:
>
> On 02.12.21 07:48, Amit Kapila wrote:
> > a. ALTER SUBSCRIPTION ... [SET|RESET] SKIP TRANSACTION xxx;
> > b. Alter Subscription <sub_name> SET ( subscription_parameter [=value]
> > [, ... ] );
> > c. Alter Subscription <sub_name> On Error ( subscription_parameter
> > [=value] [, ... ] );
> > d. Alter Subscription <sub_name> SKIP ( subscription_parameter
> > [=value] [, ... ] );
> > where subscription_parameter can be one of:
> > xid = <xid_val>
> > lsn = <lsn_val>
> > ...
>
> > As per discussion till now, option (d) seems preferable.
>
> I agree.
>
> > In this, we
> > need to see how and what to allow as options. The simplest way for the
> > first version is to just allow one xid to be specified at a time which
> > would mean that specifying multiple xids should error out. We can also
> > additionally allow specifying operations like 'insert', 'update',
> > etc., and then relation list (list of oids). What that would mean is
> > that for a transaction we can allow which particular operations and
> > relations we want to skip.
>
> I don't know how difficult it would be, but allowing multiple xids might
> be desirable.
>

Are there many cases where there could be multiple xid failures that
the user can skip? Apply worker always keeps looping at the same error
failure so the user wouldn't know of the second xid failure (if any)
till the first failure is resolved. I could think of one such case
where it is possible during the initial synchronization phase where
apply worker went ahead then tablesync worker by skipping to apply the
changes on the corresponding table. After that, it is possible, that
the table sync worker failed during the catch-up phase and apply
worker fails during the processing of some other rel.

>  But this syntax gives you flexibility, so we can also
> start with a simple implementation.
>

Yeah, I also think so. BTW, what do you think of providing extra
flexibility of giving other options like 'operation', 'rel' along with
xid? I think such options could be useful for large transactions that
operate on multiple tables as it is quite possible that only a
particular operation from the entire transaction is the cause of
failure. Now, on one side, we can argue that skipping the entire
transaction is better from the consistency point of view but I think
it is already possible that we just skip a particular update/delete
(if the corresponding tuple doesn't exist on the subscriber). For the
sake of simplicity, we can just allow providing xid at this stage and
then extend it later as required but I am not very sure of that point.

> > I am not sure what exactly we can provide to users to allow skipping
> > initial table sync as we can't specify XID there. One option that
> > comes to mind is to allow specifying a combination of copy_data and
> > relid to skip table sync for a particular relation. We might think of
> > not doing anything for table sync workers but not sure if that is a
> > good option.
>
> I don't think this feature should affect tablesync.  The semantics are
> not clear, and it's not really needed.  If the tablesync doesn't work,
> you can try the setup again from scratch.
>

Okay, that makes sense. But note it is possible that tablesync workers
might also need to skip some xids during the catchup phase to complete
the sync.

-- 
With Regards,
Amit Kapila.



В списке pgsql-hackers по дате отправления:

Предыдущее
От: Peter Smith
Дата:
Сообщение: Re: row filtering for logical replication
Следующее
От: Alexander Lakhin
Дата:
Сообщение: Re: More time spending with "delete pending"