Re: Logical replication - schema change not invalidating the relation cache

From: Dilip Kumar <dilipbalaut(at)gmail(dot)com>
To: vignesh C <vignesh21(at)gmail(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Logical replication - schema change not invalidating the relation cache
Date: 2021-07-02 06:33:38
Message-ID: CAFiTN-sqPxGwfC7+PsDKZUd9O9R5EevWF-sPE2EJj=doPndRyw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Fri, Jul 2, 2021 at 11:11 AM vignesh C <vignesh21(at)gmail(dot)com> wrote:
>
> Hi,
>
> I found a strange behavior when there is an insert after renaming the
> schema. The test steps for the same are given below, Here after the
> schema is renamed, the renamed schema table data should not be sent,
> but the data was being sent. I felt the schema invalidation was not
> called, attached a patch to handle the same. Thoughts?
>
> step 1)
> Create schema sch1;
> Create table sch1.t1(c1 int);
> CREATE PUBLICATION mypub1 FOR all tables;
>
> Step 2)
> CREATE SCHEMA sch1;
> CREATE TABLE sch1.t1(c1 int);
> CREATE SCHEMA sch2;
> CREATE TABLE sch2.t1(c1 int);
> CREATE TABLE t1(c1 int);
> CREATE SUBSCRIPTION mysub1 CONNECTION 'host=localhost port=5432
> dbname=postgres' PUBLICATION mypub1;
>
> Step 3)
> begin;
> insert into sch1.t1 values(1);
> alter schema sch1 rename to sch2;
> create schema sch1;
> create table sch1.t1(c1 int);
> insert into sch1.t1 values(2);
> insert into sch2.t1 values(3);
> commit;
>
> step 4)
> select * from sch1.t1; # In subscriber
> Got:
> c1
> ----
> 1
> 2
> 3
> (3 rows)
>
> Expected:
> c1
> ----
> 1
> 2
> (2 rows)

Yeah, this looks like a bug. I will look at the patch.

--
Regards,
Dilip Kumar
EnterpriseDB: http://www.enterprisedb.com

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrey Borodin 2021-07-02 06:39:39 Re: Synchronous commit behavior during network outage
Previous Message Bharath Rupireddy 2021-07-02 06:33:07 Re: Can a child process detect postmaster death when in pg_usleep?