postgres.git / summary / log / commit / refs
commit 622c82279dcba1208049b8b9ae93023757a2dbbe
Author: Robert Haas <rhaas@postgresql.org>
Date: Wed May 10 03:51:54 2017 +0000
Avoid theoretical infinite loop loading relcache partition key.
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);
[parent: e17628145ac3]