mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-18 18:44:06 +08: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),
|
snprintf(query, sizeof(query),
|
||||||
"SELECT c.oid, n.nspname, c.relname, "
|
"CREATE TEMPORARY TABLE info_rels (reloid) AS SELECT c.oid "
|
||||||
" c.relfilenode, c.reltablespace, %s "
|
|
||||||
"FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n "
|
"FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n "
|
||||||
" ON c.relnamespace = n.oid "
|
" ON c.relnamespace = n.oid "
|
||||||
" LEFT OUTER JOIN pg_catalog.pg_tablespace t "
|
"WHERE relkind IN ('r', 'i'%s) AND "
|
||||||
" ON c.reltablespace = t.oid "
|
|
||||||
"WHERE relkind IN ('r','t', 'i'%s) AND "
|
|
||||||
/* exclude possible orphaned temp tables */
|
/* exclude possible orphaned temp tables */
|
||||||
" ((n.nspname !~ '^pg_temp_' AND "
|
" ((n.nspname !~ '^pg_temp_' AND "
|
||||||
" n.nspname !~ '^pg_toast_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) "
|
" c.oid >= %u) "
|
||||||
" OR (n.nspname = 'pg_catalog' AND "
|
" OR (n.nspname = 'pg_catalog' AND "
|
||||||
" relname IN ('pg_largeobject', 'pg_largeobject_loid_pn_index'%s) )) "
|
" 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",
|
|
||||||
/* see the comment at the top of old_8_3_create_sequence_script() */
|
/* see the comment at the top of old_8_3_create_sequence_script() */
|
||||||
(GET_MAJOR_VERSION(old_cluster.major_version) <= 803) ?
|
(GET_MAJOR_VERSION(old_cluster.major_version) <= 803) ?
|
||||||
"" : ", 'S'",
|
"" : ", 'S'",
|
||||||
/* this oid allows us to skip system toast tables */
|
|
||||||
FirstNormalObjectId,
|
FirstNormalObjectId,
|
||||||
/* does pg_largeobject_metadata need to be migrated? */
|
/* does pg_largeobject_metadata need to be migrated? */
|
||||||
(GET_MAJOR_VERSION(old_cluster.major_version) <= 804) ?
|
(GET_MAJOR_VERSION(old_cluster.major_version) <= 804) ?
|
||||||
"" : ", 'pg_largeobject_metadata', 'pg_largeobject_metadata_oid_index'");
|
"" : ", '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);
|
res = executeQueryOrDie(conn, "%s", query);
|
||||||
|
|
||||||
ntups = PQntuples(res);
|
ntups = PQntuples(res);
|
||||||
|
Loading…
Reference in New Issue
Block a user