mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	Adjust pg_upgrade query so toast tables related to system catalog schema
entries are not dumped. This fixes an error caused by droping/recreating the information_schema, but other failures were also possible. Backpatch to 9.2.
This commit is contained in:
		
							parent
							
								
									b61837a49f
								
							
						
					
					
						commit
						ac96b851ec
					
				| @ -269,34 +269,59 @@ get_rel_infos(ClusterInfo *cluster, DbInfo *dbinfo) | ||||
| 	 */ | ||||
| 
 | ||||
| 	snprintf(query, sizeof(query), | ||||
| 			 "SELECT c.oid, n.nspname, c.relname, " | ||||
| 			 "	c.relfilenode, c.reltablespace, %s " | ||||
| 			 "CREATE TEMPORARY TABLE info_rels (reloid) AS SELECT c.oid " | ||||
| 			 "FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n " | ||||
| 			 "	   ON c.relnamespace = n.oid " | ||||
| 			 "  LEFT OUTER JOIN pg_catalog.pg_tablespace t " | ||||
| 			 "	   ON c.reltablespace = t.oid " | ||||
| 			 "WHERE relkind IN ('r','t', 'i'%s) AND " | ||||
| 			 "WHERE relkind IN ('r', 'i'%s) AND " | ||||
| 	/* exclude possible orphaned temp tables */ | ||||
| 			 "  ((n.nspname !~ '^pg_temp_' AND " | ||||
| 			 "    n.nspname !~ '^pg_toast_temp_' AND " | ||||
| 			 "    n.nspname NOT IN ('pg_catalog', 'information_schema', 'binary_upgrade') AND " | ||||
| 	/* skip pg_toast because toast index have relkind == 'i', not 't' */ | ||||
| 			 "    n.nspname NOT IN ('pg_catalog', 'information_schema', " | ||||
| 			 "						'binary_upgrade', 'pg_toast') AND " | ||||
| 			 "	  c.oid >= %u) " | ||||
| 			 "  OR (n.nspname = 'pg_catalog' AND " | ||||
| 	"    relname IN ('pg_largeobject', 'pg_largeobject_loid_pn_index'%s) )) " | ||||
| 	/* we preserve pg_class.oid so we sort by it to match old/new */ | ||||
| 			 "ORDER BY 1;", | ||||
| 	/* 9.2 removed the spclocation column */ | ||||
| 			 (GET_MAJOR_VERSION(cluster->major_version) <= 901) ? | ||||
| 			 "t.spclocation" : "pg_catalog.pg_tablespace_location(t.oid) AS spclocation", | ||||
| 	"    relname IN ('pg_largeobject', 'pg_largeobject_loid_pn_index'%s) ));", | ||||
| 	/* see the comment at the top of old_8_3_create_sequence_script() */ | ||||
| 			 (GET_MAJOR_VERSION(old_cluster.major_version) <= 803) ? | ||||
| 			 "" : ", 'S'", | ||||
| 	/* this oid allows us to skip system toast tables */ | ||||
| 			 FirstNormalObjectId, | ||||
| 	/* does pg_largeobject_metadata need to be migrated? */ | ||||
| 			 (GET_MAJOR_VERSION(old_cluster.major_version) <= 804) ? | ||||
| 	"" : ", 'pg_largeobject_metadata', 'pg_largeobject_metadata_oid_index'"); | ||||
| 
 | ||||
| 	PQclear(executeQueryOrDie(conn, "%s", query)); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 *	Get TOAST tables and indexes;  we have to gather the TOAST tables in | ||||
| 	 *	later steps because we can't schema-qualify TOAST tables. | ||||
| 	 */ | ||||
| 	PQclear(executeQueryOrDie(conn, | ||||
| 							  "INSERT INTO info_rels " | ||||
| 							  "SELECT reltoastrelid " | ||||
| 							  "FROM info_rels i JOIN pg_catalog.pg_class c " | ||||
| 							  "		ON i.reloid = c.oid")); | ||||
| 	PQclear(executeQueryOrDie(conn, | ||||
| 							  "INSERT INTO info_rels " | ||||
| 							  "SELECT reltoastidxid " | ||||
| 							  "FROM info_rels i JOIN pg_catalog.pg_class c " | ||||
| 							  "		ON i.reloid = c.oid")); | ||||
| 
 | ||||
| 	snprintf(query, sizeof(query), | ||||
| 			 "SELECT c.oid, n.nspname, c.relname, " | ||||
| 			 "	c.relfilenode, c.reltablespace, %s " | ||||
| 			 "FROM info_rels i JOIN pg_catalog.pg_class c " | ||||
| 			 "		ON i.reloid = c.oid " | ||||
| 			 "  JOIN pg_catalog.pg_namespace n " | ||||
| 			 "	   ON c.relnamespace = n.oid " | ||||
| 			 "  LEFT OUTER JOIN pg_catalog.pg_tablespace t " | ||||
| 			 "	   ON c.reltablespace = t.oid " | ||||
| 	/* we preserve pg_class.oid so we sort by it to match old/new */ | ||||
| 			 "ORDER BY 1;", | ||||
| 	/* 9.2 removed the spclocation column */ | ||||
| 		   (GET_MAJOR_VERSION(cluster->major_version) <= 901) ? | ||||
| 		   "t.spclocation" : "pg_catalog.pg_tablespace_location(t.oid) AS spclocation"); | ||||
| 
 | ||||
| 	res = executeQueryOrDie(conn, "%s", query); | ||||
| 
 | ||||
| 	ntups = PQntuples(res); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user