|
|
|
|
@ -320,13 +320,14 @@ get_rel_infos(ClusterInfo *cluster, DbInfo *dbinfo) |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
snprintf(query, sizeof(query), |
|
|
|
|
"CREATE TEMPORARY TABLE info_rels (reloid) AS SELECT c.oid " |
|
|
|
|
/* get regular heap */ |
|
|
|
|
"WITH regular_heap (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_index i " |
|
|
|
|
" ON c.oid = i.indexrelid " |
|
|
|
|
" WHERE relkind IN ('r', 'm', 'i', 'S') AND " |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* pg_dump only dumps valid indexes; testing indisready is necessary in |
|
|
|
|
* 9.2, and harmless in earlier/later versions. |
|
|
|
|
@ -339,49 +340,52 @@ get_rel_infos(ClusterInfo *cluster, DbInfo *dbinfo) |
|
|
|
|
/* 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) ));", |
|
|
|
|
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)); |
|
|
|
|
|
|
|
|
|
" c.oid >= %u) OR " |
|
|
|
|
" (n.nspname = 'pg_catalog' AND " |
|
|
|
|
" relname IN ('pg_largeobject', 'pg_largeobject_loid_pn_index'%s) ))), " |
|
|
|
|
/*
|
|
|
|
|
* Get TOAST tables and indexes; we have to gather the TOAST tables in |
|
|
|
|
* later steps because we can't schema-qualify TOAST tables. |
|
|
|
|
* 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 " |
|
|
|
|
/* get TOAST heap */ |
|
|
|
|
" toast_heap (reloid) AS ( " |
|
|
|
|
" SELECT reltoastrelid " |
|
|
|
|
"FROM info_rels i JOIN pg_catalog.pg_class c " |
|
|
|
|
" ON i.reloid = c.oid " |
|
|
|
|
" AND c.reltoastrelid != %u", InvalidOid)); |
|
|
|
|
PQclear(executeQueryOrDie(conn, |
|
|
|
|
"INSERT INTO info_rels " |
|
|
|
|
" FROM regular_heap JOIN pg_catalog.pg_class c " |
|
|
|
|
" ON regular_heap.reloid = c.oid " |
|
|
|
|
" AND c.reltoastrelid != %u), " |
|
|
|
|
/* get indexes on regular and TOAST heap */ |
|
|
|
|
" all_index (reloid) AS ( " |
|
|
|
|
" SELECT indexrelid " |
|
|
|
|
" FROM pg_index " |
|
|
|
|
" WHERE indisvalid " |
|
|
|
|
" AND indrelid IN (SELECT reltoastrelid " |
|
|
|
|
" FROM info_rels i " |
|
|
|
|
" FROM (SELECT reloid FROM regular_heap " |
|
|
|
|
" UNION ALL " |
|
|
|
|
" SELECT reloid FROM toast_heap) all_heap " |
|
|
|
|
" JOIN pg_catalog.pg_class c " |
|
|
|
|
" ON i.reloid = c.oid " |
|
|
|
|
" AND c.reltoastrelid != %u)", |
|
|
|
|
InvalidOid)); |
|
|
|
|
|
|
|
|
|
snprintf(query, sizeof(query), |
|
|
|
|
" ON all_heap.reloid = c.oid " |
|
|
|
|
" AND c.reltoastrelid != %u)) " |
|
|
|
|
/* get all rels */ |
|
|
|
|
"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 " |
|
|
|
|
"FROM (SELECT reloid FROM regular_heap " |
|
|
|
|
" UNION ALL " |
|
|
|
|
" SELECT reloid FROM toast_heap " |
|
|
|
|
" UNION ALL " |
|
|
|
|
" SELECT reloid FROM all_index) all_rels " |
|
|
|
|
" JOIN pg_catalog.pg_class c " |
|
|
|
|
" ON all_rels.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;", |
|
|
|
|
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'", |
|
|
|
|
InvalidOid, InvalidOid, |
|
|
|
|
/* 9.2 removed the spclocation column */ |
|
|
|
|
(GET_MAJOR_VERSION(cluster->major_version) <= 901) ? |
|
|
|
|
"t.spclocation" : "pg_catalog.pg_tablespace_location(t.oid) AS spclocation"); |
|
|
|
|
|