mirror of
https://github.com/postgres/postgres.git
synced 2025-06-29 10:41:53 +03:00
Obtain table locks as soon as practical during pg_dump.
For some reason, when we (I) added table lock acquisition to pg_dump, we didn't think about making it happen as soon as possible after the start of the transaction. What with subsequent additions, there was actually quite a lot going on before we got around to that; which sort of defeats the purpose. Rearrange the order of calls in dumpSchema() to close the risk window as much as we easily can. Back-patch to all supported branches.
This commit is contained in:
@ -113,6 +113,17 @@ getSchemaData(int *numTablesPtr)
|
|||||||
write_msg(NULL, "reading schemas\n");
|
write_msg(NULL, "reading schemas\n");
|
||||||
nsinfo = getNamespaces(&numNamespaces);
|
nsinfo = getNamespaces(&numNamespaces);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* getTables should be done as soon as possible, so as to minimize the
|
||||||
|
* window between starting our transaction and acquiring per-table locks.
|
||||||
|
* However, we have to do getNamespaces first because the tables get
|
||||||
|
* linked to their containing namespaces during getTables.
|
||||||
|
*/
|
||||||
|
if (g_verbose)
|
||||||
|
write_msg(NULL, "reading user-defined tables\n");
|
||||||
|
tblinfo = getTables(&numTables);
|
||||||
|
tblinfoindex = buildIndexArray(tblinfo, numTables, sizeof(TableInfo));
|
||||||
|
|
||||||
if (g_verbose)
|
if (g_verbose)
|
||||||
write_msg(NULL, "reading user-defined functions\n");
|
write_msg(NULL, "reading user-defined functions\n");
|
||||||
funinfo = getFuncs(&numFuncs);
|
funinfo = getFuncs(&numFuncs);
|
||||||
@ -174,11 +185,6 @@ getSchemaData(int *numTablesPtr)
|
|||||||
write_msg(NULL, "reading user-defined conversions\n");
|
write_msg(NULL, "reading user-defined conversions\n");
|
||||||
convinfo = getConversions(&numConversions);
|
convinfo = getConversions(&numConversions);
|
||||||
|
|
||||||
if (g_verbose)
|
|
||||||
write_msg(NULL, "reading user-defined tables\n");
|
|
||||||
tblinfo = getTables(&numTables);
|
|
||||||
tblinfoindex = buildIndexArray(tblinfo, numTables, sizeof(TableInfo));
|
|
||||||
|
|
||||||
if (g_verbose)
|
if (g_verbose)
|
||||||
write_msg(NULL, "reading table inheritance information\n");
|
write_msg(NULL, "reading table inheritance information\n");
|
||||||
inhinfo = getInherits(&numInherits);
|
inhinfo = getInherits(&numInherits);
|
||||||
|
Reference in New Issue
Block a user