diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c
index 595760b19f..6b121fc3a1 100644
--- a/src/backend/optimizer/plan/setrefs.c
+++ b/src/backend/optimizer/plan/setrefs.c
@@ -15,7 +15,9 @@
  */
 #include "postgres.h"
 
+#include "access/table.h"
 #include "access/transam.h"
+#include "catalog/pg_class.h"
 #include "catalog/pg_type.h"
 #include "nodes/makefuncs.h"
 #include "nodes/nodeFuncs.h"
@@ -24,6 +26,7 @@
 #include "optimizer/planmain.h"
 #include "optimizer/planner.h"
 #include "optimizer/tlist.h"
+#include "partitioning/partdesc.h"
 #include "tcop/utility.h"
 #include "utils/lsyscache.h"
 #include "utils/syscache.h"
@@ -3018,6 +3021,9 @@ extract_query_dependencies(Node *query,
 	*relationOids = glob.relationOids;
 	*invalItems = glob.invalItems;
 	*hasRowSecurity = glob.dependsOnRole;
+
+	if (glob.partition_directory != NULL)
+		DestroyPartitionDirectory(glob.partition_directory);
 }
 
 /*
@@ -3060,8 +3066,36 @@ extract_query_dependencies_walker(Node *node, PlannerInfo *context)
 			RangeTblEntry *rte = (RangeTblEntry *) lfirst(lc);
 
 			if (rte->rtekind == RTE_RELATION)
-				context->glob->relationOids =
-					lappend_oid(context->glob->relationOids, rte->relid);
+			{
+				PlannerGlobal	*glob;
+
+				glob = context->glob;
+				glob->relationOids =
+					lappend_oid(glob->relationOids, rte->relid);
+				if (query->commandType == CMD_INSERT &&
+									rte->relkind == RELKIND_PARTITIONED_TABLE)
+				{
+					int				i;
+					Relation		rel;
+					PartitionDesc   pdesc;
+
+					if (glob->partition_directory == NULL)
+						glob->partition_directory =
+							CreatePartitionDirectory(CurrentMemoryContext);
+
+					rel = table_open(rte->relid, NoLock);
+					pdesc =
+						PartitionDirectoryLookup(glob->partition_directory,
+																		rel);
+
+					for (i = 0; i < pdesc->nparts; i++)
+					{
+						glob->relationOids =
+							lappend_oid(glob->relationOids, pdesc->oids[i]);
+					}
+					table_close(rel, NoLock);
+				}
+			}
 			else if (rte->rtekind == RTE_NAMEDTUPLESTORE &&
 					 OidIsValid(rte->relid))
 				context->glob->relationOids =
