Skip to content

Commit 203749a

Browse files
committed
pg_upgrade: Ignore TOAST for partitioned tables
Since partitioned tables in pg12 do not have toast tables, trying to set the toast OID confuses pg_upgrade. Have pg_dump omit those values to avoid the problem. Per Andres Freund and buildfarm members crake and snapper Discussion: https://postgr.es/m/20190306204104.yle5jfbnqkcwykni@alap3.anarazel.de
1 parent f2e4038 commit 203749a

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/bin/pg_dump/pg_dump.c

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4354,14 +4354,20 @@ binary_upgrade_set_type_oids_by_rel_oid(Archive *fout,
43544354
Oid pg_type_oid;
43554355
bool toast_set = false;
43564356

4357-
/* we only support old >= 8.3 for binary upgrades */
4357+
/*
4358+
* We only support old >= 8.3 for binary upgrades.
4359+
*
4360+
* We purposefully ignore toast OIDs for partitioned tables; the reason is
4361+
* that versions 10 and 11 have them, but 12 does not, so emitting them
4362+
* causes the upgrade to fail.
4363+
*/
43584364
appendPQExpBuffer(upgrade_query,
43594365
"SELECT c.reltype AS crel, t.reltype AS trel "
43604366
"FROM pg_catalog.pg_class c "
43614367
"LEFT JOIN pg_catalog.pg_class t ON "
4362-
" (c.reltoastrelid = t.oid) "
4368+
" (c.reltoastrelid = t.oid AND c.relkind <> '%c') "
43634369
"WHERE c.oid = '%u'::pg_catalog.oid;",
4364-
pg_rel_oid);
4370+
RELKIND_PARTITIONED_TABLE, pg_rel_oid);
43654371

43664372
upgrade_res = ExecuteSqlQueryForSingleRow(fout, upgrade_query->data);
43674373

@@ -5953,6 +5959,10 @@ getTables(Archive *fout, int *numTables)
59535959
* information about each table, basically just enough to decide if it is
59545960
* interesting. We must fetch all tables in this phase because otherwise
59555961
* we cannot correctly identify inherited columns, owned sequences, etc.
5962+
*
5963+
* We purposefully ignore toast OIDs for partitioned tables; the reason is
5964+
* that versions 10 and 11 have them, but 12 does not, so emitting them
5965+
* causes the upgrade to fail.
59565966
*/
59575967

59585968
if (fout->remoteVersion >= 90600)
@@ -6049,7 +6059,7 @@ getTables(Archive *fout, int *numTables)
60496059
"d.classid = c.tableoid AND d.objid = c.oid AND "
60506060
"d.objsubid = 0 AND "
60516061
"d.refclassid = c.tableoid AND d.deptype IN ('a', 'i')) "
6052-
"LEFT JOIN pg_class tc ON (c.reltoastrelid = tc.oid) "
6062+
"LEFT JOIN pg_class tc ON (c.reltoastrelid = tc.oid AND c.relkind <> '%c') "
60536063
"LEFT JOIN pg_am am ON (c.relam = am.oid) "
60546064
"LEFT JOIN pg_init_privs pip ON "
60556065
"(c.oid = pip.objoid "
@@ -6072,6 +6082,7 @@ getTables(Archive *fout, int *numTables)
60726082
ispartition,
60736083
partbound,
60746084
RELKIND_SEQUENCE,
6085+
RELKIND_PARTITIONED_TABLE,
60756086
RELKIND_RELATION, RELKIND_SEQUENCE,
60766087
RELKIND_VIEW, RELKIND_COMPOSITE_TYPE,
60776088
RELKIND_MATVIEW, RELKIND_FOREIGN_TABLE,

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy