From 622c82279dcba1208049b8b9ae93023757a2dbbe Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Tue, 9 May 2017 23:51:54 -0400 Subject: [PATCH] Avoid theoretical infinite loop loading relcache partition key. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Amit Langote, per report from 甄明洋 Discussion: http://postgr.es/m/57bd1e1.1886.15bd7b79cee.Coremail.18612389267@yeah.net --- src/backend/utils/cache/relcache.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index 30789c1edc5..c3721d9e431 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -3858,13 +3858,20 @@ RelationCacheInitializePhase3(void) } /* - * Reload partition key and descriptor for a partitioned table. + * Reload the partition key and descriptor for a partitioned table. */ - if (relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE) + if (relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE && + relation->rd_partkey == NULL) { RelationBuildPartitionKey(relation); Assert(relation->rd_partkey != NULL); + restart = true; + } + + if (relation->rd_rel->relkind == RELKIND_PARTITIONED_TABLE && + relation->rd_partdesc == NULL) + { RelationBuildPartitionDesc(relation); Assert(relation->rd_partdesc != NULL);