RE: Conflict detection for update_deleted in logical replication
От | Zhijie Hou (Fujitsu) |
---|---|
Тема | RE: Conflict detection for update_deleted in logical replication |
Дата | |
Msg-id | OS0PR01MB5716789514235C2F2A17CACA942AA@OS0PR01MB5716.jpnprd01.prod.outlook.com обсуждение исходный текст |
Ответ на | Re: Conflict detection for update_deleted in logical replication (shveta malik <shveta.malik@gmail.com>) |
Ответы |
Re: Conflict detection for update_deleted in logical replication
|
Список | pgsql-hackers |
On Tuesday, August 12, 2025 4:37 PM shveta malik <shveta.malik@gmail.com> wrote: > > On Mon, Aug 11, 2025 at 2:40 PM Zhijie Hou (Fujitsu) > <houzj.fnst@fujitsu.com> wrote: > > > > I agree. So, following the above points and some off-list discussions, > > I have revised the option to be a subscription option in the V60 version. > > > > Thank You for the patches. Tried to test the new sub-level parameter, have few > comments: Thanks for the comments. > > 1) > Let's say commit on pub is taking time and worker has stopped retention and > meanwhile we alter max_conflict_retention_duration=0, > then the expectation is immediately worker should resume retention. > But it does not happen, it does not restart conflict-retention until the pub's > commit is finished. The 'dead_tuple_retention_active' > remains 'f' till then. > > postgres=# select subname, subretaindeadtuples, maxconflretention from > pg_subscription order by subname; subname | subretaindeadtuples | > maxconflretention > ---------+---------------------+------------------- > sub1 | t | 0 > > > postgres=# select subname, worker_type, dead_tuple_retention_active from > pg_stat_subscription order by subname; subname | worker_type | > dead_tuple_retention_active > ---------+-------------+----------------------------- > sub1 | apply | f > > I think we shall reset 'stop_conflict_info_retention' flag in > should_stop_conflict_info_retention() if maxconflretention is 0 and the flag is > originally true. Agreed. Thinking more, I think we can resume retention at more places, as in each phase, we could have a possibility of resuming, so changed. > 2) > postgres=# create subscription sub2 connection 'dbname=postgres > host=localhost user=shveta port=5433' publication pub2 WITH > (retain_dead_tuples = false, max_conflict_retention_duration=1000); > NOTICE: created replication slot "sub2" on publisher CREATE > SUBSCRIPTION > > Shall we give notice that max_conflict_retention_duration is ignored as > retain_dead_tuples is false. Agreed. In addition to this command, I added the NOTICE for all the cases when the max_conflict_retention_duration is ineffective as discussed[1]. > > 3) > When worker stops retention, it gives message: > > LOG: logical replication worker for subscription "sub1" will stop retaining the > information for detecting conflicts > DETAIL: The time spent advancing the non-removable transaction ID has > exceeded the maximum limit of 100 ms. > > Will it be more informative if we mention the parameter name > 'max_conflict_retention_duration' either in DETAIL or in additional HINT, as > then the user can easily map this behaviour to the parameter configured. Added. Here is the V61 patch set which addressed above comments and the comment by Nisha[2]. [1] https://www.postgresql.org/message-id/CAJpy0uC81YgAmrA2ji2ZKbJK_qfvajuV6%3DyvcCWuFsQKqiED%2BA%40mail.gmail.com [2] https://www.postgresql.org/message-id/CABdArM7G1sSDDOEC-nmJRnJMCZoBsLqOMz08UotX_h_wqxHWCg%40mail.gmail.com Best Regards, Hou zj
Вложения
В списке pgsql-hackers по дате отправления: