mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +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:
		@@ -105,6 +105,17 @@ getSchemaData(int *numTablesPtr)
 | 
			
		||||
		write_msg(NULL, "reading schemas\n");
 | 
			
		||||
	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)
 | 
			
		||||
		write_msg(NULL, "reading extensions\n");
 | 
			
		||||
	extinfo = getExtensions(&numExtensions);
 | 
			
		||||
@@ -183,11 +194,6 @@ getSchemaData(int *numTablesPtr)
 | 
			
		||||
		write_msg(NULL, "reading type casts\n");
 | 
			
		||||
	getCasts(&numCasts);
 | 
			
		||||
 | 
			
		||||
	if (g_verbose)
 | 
			
		||||
		write_msg(NULL, "reading user-defined tables\n");
 | 
			
		||||
	tblinfo = getTables(&numTables);
 | 
			
		||||
	tblinfoindex = buildIndexArray(tblinfo, numTables, sizeof(TableInfo));
 | 
			
		||||
 | 
			
		||||
	if (g_verbose)
 | 
			
		||||
		write_msg(NULL, "reading table inheritance information\n");
 | 
			
		||||
	inhinfo = getInherits(&numInherits);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user