diff --git a/src/backend/access/table/tableam.c b/src/backend/access/table/tableam.c
index c814733b22..d9ca9904e1 100644
--- a/src/backend/access/table/tableam.c
+++ b/src/backend/access/table/tableam.c
@@ -33,6 +33,7 @@
 /* GUC variables */
 char	   *default_table_access_method = DEFAULT_TABLE_ACCESS_METHOD;
 bool		synchronize_seqscans = true;
+int			fake_pages = 10;
 
 
 /* ----------------------------------------------------------------------------
@@ -591,10 +592,10 @@ table_block_relation_estimate_size(Relation rel, int32 *attr_widths,
 	 * Totally empty parent tables are quite common, so we should be willing
 	 * to believe that they are empty.
 	 */
-	if (curpages < 10 &&
+	if (curpages < fake_pages &&
 		relpages == 0 &&
 		!rel->rd_rel->relhassubclass)
-		curpages = 10;
+		curpages = fake_pages;
 
 	/* report estimated # pages */
 	*pages = curpages;
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 11b3f050bc..6954274c28 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -2195,6 +2195,17 @@ static struct config_int ConfigureNamesInt[] =
 		NULL, NULL, NULL
 	},
 
+	{
+		{"fake_pages", PGC_USERSET, QUERY_TUNING_OTHER,
+			gettext_noop("Sets a number of pages for planner when relation has no pages."),
+			NULL,
+			GUC_UNIT_BLOCKS
+		},
+		&fake_pages,
+		10, 0, INT_MAX,
+		NULL, NULL, NULL
+	},
+
 	{
 		{"max_standby_archive_delay", PGC_SIGHUP, REPLICATION_STANDBY,
 			gettext_noop("Sets the maximum delay before canceling queries when a hot standby server is processing archived WAL data."),
diff --git a/src/include/access/tableam.h b/src/include/access/tableam.h
index eb18739c36..f997f9dbc4 100644
--- a/src/include/access/tableam.h
+++ b/src/include/access/tableam.h
@@ -30,6 +30,8 @@
 extern char *default_table_access_method;
 extern bool synchronize_seqscans;
 
+extern int fake_pages;
+
 
 struct BulkInsertStateData;
 struct IndexInfo;
