diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c index 0d147cb08d..9b5869add8 100644 --- a/src/bin/pg_dump/common.c +++ b/src/bin/pg_dump/common.c @@ -425,17 +425,31 @@ flagInhIndexes(Archive *fout, TableInfo tblinfo[], int numTables) attachinfo[k].dobj.catId.oid = 0; AssignDumpId(&attachinfo[k].dobj); attachinfo[k].dobj.name = pg_strdup(index->dobj.name); + attachinfo[k].dobj.namespace = index->indextable->dobj.namespace; attachinfo[k].parentIdx = parentidx; attachinfo[k].partitionIdx = index; /* - * We want dependencies from parent to partition (so that the - * partition index is created first), and another one from attach - * object to parent (so that the partition index is attached once - * the parent index has been created). + * We must state the DO_INDEX_ATTACH object's dependencies + * explicitly, since it will not match anything in pg_depend. + * + * Give it dependencies on both the partition index and the parent + * index, so that it will not be executed till both of those + * exist. (There's no need to care what order those are created + * in.) + * + * In addition, give it dependencies on the indexes' underlying + * tables. This does nothing of great value so far as serial + * restore ordering goes, but it ensures that a parallel restore + * will not try to run the ATTACH concurrently with other + * operations on those tables. */ - addObjectDependency(&parentidx->dobj, index->dobj.dumpId); + addObjectDependency(&attachinfo[k].dobj, index->dobj.dumpId); addObjectDependency(&attachinfo[k].dobj, parentidx->dobj.dumpId); + addObjectDependency(&attachinfo[k].dobj, + index->indextable->dobj.dumpId); + addObjectDependency(&attachinfo[k].dobj, + parentidx->indextable->dobj.dumpId); k++; } diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 5b722ee726..e91184ba6e 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -16317,14 +16317,15 @@ dumpIndexAttach(Archive *fout, IndexAttachInfo *attachinfo) { PQExpBuffer q = createPQExpBuffer(); - appendPQExpBuffer(q, "\nALTER INDEX %s ", + appendPQExpBuffer(q, "ALTER INDEX %s ", fmtQualifiedDumpable(attachinfo->parentIdx)); appendPQExpBuffer(q, "ATTACH PARTITION %s;\n", fmtQualifiedDumpable(attachinfo->partitionIdx)); ArchiveEntry(fout, attachinfo->dobj.catId, attachinfo->dobj.dumpId, attachinfo->dobj.name, - NULL, NULL, + attachinfo->dobj.namespace->dobj.name, + NULL, "", false, "INDEX ATTACH", SECTION_POST_DATA, q->data, "", NULL,