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++;
}
{
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,