Re: BUG #18683: A publication must be created *before* a logical rep slot in order to be used with that slot? - Mailing list pgsql-bugs

From Amit Kapila
Subject Re: BUG #18683: A publication must be created *before* a logical rep slot in order to be used with that slot?
Date
Msg-id CAA4eK1J6Cdeq_Gmrt9a8saWSh_xx1GtMukrLp+unCHixW3CP=w@mail.gmail.com
Whole thread Raw
In response to BUG #18683: A publication must be created *before* a logical rep slot in order to be used with that slot?  (PG Bug reporting form <noreply@postgresql.org>)
List pgsql-bugs
On Sat, Nov 2, 2024 at 12:26 AM PG Bug reporting form
<noreply@postgresql.org> wrote:
>
> The following bug has been logged on the website:
>
> Bug reference:      18683
> Logged by:          Anthony Accomazzo
> Email address:      accomazz@gmail.com
> PostgreSQL version: 17.0
> Operating system:   MacOS 15.0.1 (Sequoia)
> Description:
>
> It seems that if you (1) create a logical replication slot (2) and activity
> happens in your database then (3) you create a publication, the combination
> of that slot + publication is not usable (you can't connect).
>
> i.e. if there is any activity "in" a slot that predates the create statement
> for a pub, the slot+pub combo will not work.
>
> Is this known behavior? It's surprising just insofar as I'd hope either:
>
> - the docs cover this
> - the error message that one gets could be made clearer
>
> Reproduction steps:
>
> ```
> create table public.mytable (
>     id serial primary key,
>     inserted_at timestamp default now(),
>     updated_at timestamp default now()
> );
>
> create table public.mytable2 (
>     id serial primary key,
>     inserted_at timestamp default now(),
>     updated_at timestamp default now()
> );
>
> -- ensure clean start
> drop publication test_pub;
> select pg_drop_replication_slot('test_slot');
>
> -- create the slot
> select pg_create_logical_replication_slot('test_slot', 'pgoutput');
> -- insert into any table
> insert into mytable2 (id) values (default);
> -- create a pub
> create publication test_pub for table mytable;
> -- cannot connect to slot
>
> -- in shell:
> $ pg_recvlogical -d
> postgresql://postgres:postgres@localhost:5432/sequin_dev_rep --slot
> test_slot --start -o proto_version=1 -o publication_names='test_pub' -f -
>
> pg_recvlogical: error: unexpected termination of replication stream: ERROR:
> publication "test_pub" does not exist
> CONTEXT:  slot "test_slot", output plugin "pgoutput", in the change
> callback, associated LSN A/7D3CD9F0
> pg_recvlogical: disconnected; waiting 5 seconds to try again
> pg_recvlogical: error: unexpected termination of replication stream: ERROR:
> publication "test_pub" does not exist
> ```

This is a known behavior and I have seen such reports earlier. There
is a discussion of a related issue in the email [1] with a proposed
patch to solve it. I don't think the proposed solution can help with
getting the data generated before the creation of publication but one
can avoid getting repeated ERRORs. You can give it a try and share
your feedback on that thread [1], if possible.

[1] -
https://www.postgresql.org/message-id/CALDaNm0-n8FGAorM%2BbTxkzn%2BAOUyx5%3DL_XmnvOP6T24%2B-NcBKg%40mail.gmail.com

--
With Regards,
Amit Kapila.



pgsql-bugs by date:

Previous
From: PG Bug reporting form
Date:
Subject: BUG #18690: A count function returns wrong value when using FDW
Next
From: David Rowley
Date:
Subject: Re: BUG #18690: A count function returns wrong value when using FDW