Re: BUG #17670: Logical Replication data may be lost on the subscription under certain scenarios - Mailing list pgsql-bugs

From Japin Li
Subject Re: BUG #17670: Logical Replication data may be lost on the subscription under certain scenarios
Date
Msg-id MEYP282MB1669D0237D3B853564848068B6329@MEYP282MB1669.AUSP282.PROD.OUTLOOK.COM
Whole thread Raw
In response to BUG #17670: Logical Replication data may be lost on the subscription under certain scenarios  (PG Bug reporting form <noreply@postgresql.org>)
Responses Re: BUG #17670: Logical Replication data may be lost on the subscription under certain scenarios
List pgsql-bugs
On Fri, 28 Oct 2022 at 15:48, PG Bug reporting form <noreply@postgresql.org> wrote:
> The following bug has been logged on the website:
>
> Bug reference:      17670
> Logged by:          Yunhe Xu
> Email address:      xyh@nvn.xyz
> PostgreSQL version: 14.4
> Operating system:   rhel 7
> Description:        
>
> Logical Replication data may be lost on the subscription under certain
> scenarios.
> The following is review process.
>
> * Logical Replication Information
> t1=# select * from pg_publication_tables ;
>   pubname   | schemaname |   tablename    
> ------------+------------+----------------
>  pub1       | public     | t_test1
> t2=# select srrelid::regclass,* from pg_subscription_rel ;
>  srrelid | srsubid | srrelid | srsubstate | srsublsn  
> ---------+---------+---------+------------+-----------
>  t_test1 |   57551 |   41170 | r          | 0/696E418
> t1=# select application_name,state from pg_stat_replication where
> application_name='test2_sub';
>  application_name |   state   
> ------------------+-----------
>  test2_sub        | streaming
>
> * Verify the status is normal
> t1=# insert into t_test1 values (1);
> INSERT 0 1
> t1=# select * from t_test1;
>  id 
> ----
>   1
> t2=# select * from t_test1;
>  id 
> ----
>   1
>
> * Then delete this table on subscription : 
> t2=# alter table t_test1 rename TO t_test2;
> ALTER TABLE
>
> * Now,do DMLs
> t1=# insert into t_test1 values (2);
> INSERT 0 1
> t1=# delete from t_test1 where id=1;
> DELETE 1
> t1=# 
> * The log gives some errors
> 2022-10-28 15:14:07.919 CST,,,2600,,635b813f.a28,2,,2022-10-28 15:14:07
> CST,4/12,0,ERROR,55000,"logical replication target relation
> ""public.t_test1"" does not exist",,,,,,,,,"","logical replication
> worker",,0
>
> * OK,Let me create this table
> t2=# create table t_test1 (id int PRIMARY KEY);
> CREATE TABLE
>
> * At this point, the log is no longer showing errors.But the incremental
> data is lost.
> t2=# select * from t_test1;
>  id 
> ----
> (0 rows)
>
> t1=# insert into t_test1 values (3);
> INSERT 0 1
> t1=# insert into t_test1 values (4);
> INSERT 0 1
>
> t2=# select * from t_test1;
>  id 
> ----
> (0 rows)
> t2=# select * from t_test2 ;
>  id 
> ----
>   1
> (1 row)
>
> * Still no error.
> * Now modify the previous table back
>
> t2=# drop table t_test1 ;
> DROP TABLE
> t2=# alter table t_test2 rename TO t_test1;
> ALTER TABLE
>
> t1=# insert into t_test1 values (5);
> INSERT 0 1
> t1=# select * from t_test1;
>  id 
> ----
>   2
>   3
>   4
>   5
> (4 rows)
>
> t2=# select * from t_test1;
>  id 
> ----
>   1
>   5
> (2 rows)
>
> * The middle operation-delete id=1 and insert id=3,4-is loss.
> *Please confirm if this is a BUG.
>

I can reproduce it on HEAD.  Here is my analysis:

When we rename the t_test1 to t_test2, the subscriber doesn't have a
table matched publication table name, so the logical replication throw
an error.  Then, we create a new t_test1 on subscriber, the logical
replication worker can find the table that matches the published name.
However, the pg_subscription_rel hasn't updated, and when we try to get
the subscription state through GetSubscriptionRelState(), it cannot find
a matched subscription relation mapping, so the WAL cannot apply to the
new table t_test1.

-- 
Regrads,
Japin Li.
ChengDu WenWu Information Technology Co.,Ltd.



pgsql-bugs by date:

Previous
From: Sergey Shinderuk
Date:
Subject: Re: BUG #17669: Invalid TOAST pointer in PL/pgSQL variable
Next
From: Dilip Kumar
Date:
Subject: Re: BUG #17670: Logical Replication data may be lost on the subscription under certain scenarios