From: | "shiy(dot)fnst(at)fujitsu(dot)com" <shiy(dot)fnst(at)fujitsu(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Dilip Kumar <dilipbalaut(at)gmail(dot)com> |
Cc: | "ilya(dot)v(dot)gladyshev(at)gmail(dot)com" <ilya(dot)v(dot)gladyshev(at)gmail(dot)com>, "pgsql-hackers(at)lists(dot)postgresql(dot)org" <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | RE: Segfault on logical replication to partitioned table with foreign children |
Date: | 2022-10-31 03:20:25 |
Message-ID: | OSZPR01MB6310B855B1B90FEE433A98F4FD379@OSZPR01MB6310.jpnprd01.prod.outlook.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Sun, Oct 30, 2022 9:39 PM Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
>
> What I'm wondering about is whether we can refactor this code
> to avoid so many usually-useless catalog lookups. Pulling the
> namespace name, in particular, is expensive and we generally
> are not going to need the result. In the child-rel case it'd
> be much better to pass the opened relation and let the error-check
> subroutine work from that. Maybe we should just do it like that
> at the start of the recursion, too? Or pass the relid and let
> the subroutine look up the names only in the error case.
>
> A completely different line of thought is that this doesn't seem
> like a terribly bulletproof fix, since children could get added to
> a partitioned table after we look. Maybe it'd be better to check
> the relkind at the last moment before we do something that depends
> on a child table being a relation.
>
I agree. So maybe we can add this check in apply_handle_tuple_routing().
diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c
index 5250ae7f54..e941b68e4b 100644
--- a/src/backend/replication/logical/worker.c
+++ b/src/backend/replication/logical/worker.c
@@ -2176,6 +2176,10 @@ apply_handle_tuple_routing(ApplyExecutionData *edata,
Assert(partrelinfo != NULL);
partrel = partrelinfo->ri_RelationDesc;
+ /* Check for supported relkind. */
+ CheckSubscriptionRelkind(partrel->rd_rel->relkind,
+ relmapentry->remoterel.nspname, relmapentry->remoterel.relname);
+
/*
* To perform any of the operations below, the tuple must match the
* partition's rowtype. Convert if needed or just copy, using a dedicated
Regards,
Shi yu
From | Date | Subject | |
---|---|---|---|
Next Message | samay sharma | 2022-10-31 03:51:59 | Re: Documentation for building with meson |
Previous Message | David Rowley | 2022-10-31 02:56:28 | Re: Adding doubly linked list type which stores the number of items in the list |