Re: Starting logical replication at arbitrary point that's available in WAL

2024-12-27 Thread Alexander Uvizhev

On 12/27/24 13:20, Zhijie Hou (Fujitsu) wrote:


On Friday, December 27, 2024 7:39 PM Alexander Uvizhev 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.
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.

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

Starting logical replication at arbitrary point that's available in WAL

2024-12-27 Thread Alexander Uvizhev

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?

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.


I'm using PostgreSQL 16.6.

--
AU
||