diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c
index db48ccb41915c4bbd85afbbb85ed04f8f9b59686..9ec180decad1bce2f08024c28da3457c2c4ebfd1 100644
--- a/src/bin/pg_dump/common.c
+++ b/src/bin/pg_dump/common.c
@@ -114,6 +114,9 @@ getSchemaData(Archive *fout, int *numTablesPtr)
 	tblinfo = getTables(fout, &numTables);
 	tblinfoindex = buildIndexArray(tblinfo, numTables, sizeof(TableInfo));
 
+	/* Do this after we've built tblinfoindex */
+	getOwnedSeqs(fout, tblinfo, numTables);
+
 	if (g_verbose)
 		write_msg(NULL, "reading extensions\n");
 	extinfo = getExtensions(fout, &numExtensions);
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 14389bd0d37293427b67c2b3d6608121991fe89c..f9fbaeeb5e8de0a17ca91b516242b21977bfaa5a 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -4307,38 +4307,43 @@ getTables(Archive *fout, int *numTables)
 
 	PQclear(res);
 
+	destroyPQExpBuffer(query);
+
+	return tblinfo;
+}
+
+/*
+ * getOwnedSeqs
+ *	  identify owned sequences and mark them as dumpable if owning table is
+ *
+ * We used to do this in getTables(), but it's better to do it after the
+ * index used by findTableByOid() has been set up.
+ */
+void
+getOwnedSeqs(Archive *fout, TableInfo tblinfo[], int numTables)
+{
+	int			i;
+
 	/*
 	 * Force sequences that are "owned" by table columns to be dumped whenever
 	 * their owning table is being dumped.
 	 */
-	for (i = 0; i < ntups; i++)
+	for (i = 0; i < numTables; i++)
 	{
 		TableInfo  *seqinfo = &tblinfo[i];
-		int			j;
+		TableInfo  *owning_tab;
 
 		if (!OidIsValid(seqinfo->owning_tab))
 			continue;			/* not an owned sequence */
 		if (seqinfo->dobj.dump)
 			continue;			/* no need to search */
-
-		/* can't use findTableByOid yet, unfortunately */
-		for (j = 0; j < ntups; j++)
+		owning_tab = findTableByOid(seqinfo->owning_tab);
+		if (owning_tab && owning_tab->dobj.dump)
 		{
-			if (tblinfo[j].dobj.catId.oid == seqinfo->owning_tab)
-			{
-				if (tblinfo[j].dobj.dump)
-				{
-					seqinfo->interesting = true;
-					seqinfo->dobj.dump = true;
-				}
-				break;
-			}
+			seqinfo->interesting = true;
+			seqinfo->dobj.dump = true;
 		}
 	}
-
-	destroyPQExpBuffer(query);
-
-	return tblinfo;
 }
 
 /*
diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h
index 28a7fe4e130977627eaba67991bd455b0c3cd449..fba69532ab2611e112971b4a766043c8f14d5071 100644
--- a/src/bin/pg_dump/pg_dump.h
+++ b/src/bin/pg_dump/pg_dump.h
@@ -538,6 +538,7 @@ extern OpfamilyInfo *getOpfamilies(Archive *fout, int *numOpfamilies);
 extern CollInfo *getCollations(Archive *fout, int *numCollations);
 extern ConvInfo *getConversions(Archive *fout, int *numConversions);
 extern TableInfo *getTables(Archive *fout, int *numTables);
+extern void getOwnedSeqs(Archive *fout, TableInfo tblinfo[], int numTables);
 extern InhInfo *getInherits(Archive *fout, int *numInherits);
 extern void getIndexes(Archive *fout, TableInfo tblinfo[], int numTables);
 extern void getConstraints(Archive *fout, TableInfo tblinfo[], int numTables);