Re: Starting logical replication at arbitrary point that's available in WAL
От | Alexander Uvizhev |
---|---|
Тема | Re: Starting logical replication at arbitrary point that's available in WAL |
Дата | |
Msg-id | ed8c4de2-2202-46ef-966f-b6a3d450034a@posteo.net обсуждение исходный текст |
Ответ на | RE: Starting logical replication at arbitrary point that's available in WAL ("Zhijie Hou (Fujitsu)" <houzj.fnst@fujitsu.com>) |
Список | pgsql-general |
On 12/27/24 13:20, Zhijie Hou (Fujitsu) wrote:
Thanks for the idea, I've already discovered it and it requires me to implement some script to advance that dedicated slot, which I was hoping to avoid.On Friday, December 27, 2024 7:39 PM Alexander Uvizhev <uvizhe@posteo.net> wrote: Hi,I'm doing a logical replication using streaming replication protocol and I'm trying to start a stream from a certain arbitrary point that's available in WAL. However, both CREATE_REPLICATION_SLOT and pg_create_logical_replication_slot() create slot with nearly last LSN/XID. Is it possible to create a replication slot with arbitrary LSN/XID values?I think it's not supported to specify arbitrary LSN/XID values for a newly created slot in core. However, if you have an existing slot with an older LSN/XID, you can copy it using pg_copy_logical_replication_slot, and then advance the copied slot to your desired position with pg_replication_slot_advance.
Also pg_create_logical_replication_slot() for some reason gives different result than CREATE_REPLICATION_SLOT: new slot's `catalog_xmin` is set to the smallest `catalog_xmin` among already existing slots. Looks like a bug.Could you provide a script to reproduce this issue ? That would be helpful in diagnosing the reason.
Unfortunately, I have no such script. But it looks like this:test=> select slot_name, catalog_xmin, restart_lsn, confirmed_flush_lsn from pg_replication_slots;
slot_name | catalog_xmin | restart_lsn | confirmed_flush_lsn
---------------+--------------+-------------+---------------------
inactive_slot | 10073 | 0/1101DB88 | 0/1101DB88
active_slot | 42607 | 0/17A87410 | 0/17A87410
physical | | 0/17A875A0 |
test=> select pg_create_logical_replication_slot('test_slot', 'decoderbufs');
slot_name | catalog_xmin | restart_lsn | confirmed_flush_lsn
---------------+--------------+-------------+---------------------
inactive_slot | 10073 | 0/1101DB88 | 0/1101DB88
active_slot | 42607 | 0/17A87410 | 0/17A87410
physical | | 0/17A875D8 |
test_slot | 10073 | 0/17A875A0 | 0/17A875D8
While using CREATE_REPLICATION_SLOT would give me the same slot with `catalog_xmin` = 42607.
Hope this helps.
--Best Regards, Hou zj
AU
В списке pgsql-general по дате отправления: