Re: pg_upgrade fails to detect unsupported arrays and ranges
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Daniel Gustafsson <daniel@yesql.se>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>,
Tomas Vondra <tomas.vondra@enterprisedb.com>
Date: 2021-04-28T15:09:15Z
Lists: pgsql-hackers
Attachments
- fix-pg_upgrade-data-type-checks-2.patch (text/x-diff) patch
[ blast-from-the-past department ] I wrote: > Daniel Gustafsson <daniel@yesql.se> writes: >> I can see the appeal of >> including it before the wrap, even though I personally would've held off. > Nah, I'm not gonna risk it at this stage. I concur with your point > that this is an ancient bug, and one that is unlikely to bite many > people. I'll push it Wednesday or so. I happened across a couple of further pg_upgrade oversights in the same vein as 29aeda6e4 et al: * Those commits fixed the bugs in pg_upgrade/version.c about not checking the contents of arrays/ranges/etc, but there are two similar functions in pg_upgrade/check.c that I failed to notice (probably due to the haste with which that patch was prepared). * We really need to also reject user tables that contain instances of system-defined composite types (i.e. catalog rowtypes), because except for a few bootstrap catalogs, those type OIDs are assigned by genbki.pl not by hand, so they aren't stable across major versions. For example, in HEAD I get regression=# select 'pg_enum'::regtype::oid; oid ------- 13045 (1 row) but the same OID was 12022 in v13, 11551 in v11, etc. So if you had a column of type pg_enum, you'd likely get no-such-type-OID failures when reading the values after an upgrade. I don't see much use-case for doing such a thing, so it seems saner to just block off the possibility rather than trying to support it. (We'd have little choice in the back branches anyway, as their OID values are locked down now.) The attached proposed patch fixes these cases too. I generalized the recursive query a little more so that it could start from an arbitrary query yielding pg_type OIDs, rather than just one type name; otherwise it's pretty straightforward. Barring objections I'll apply and back-patch this soon. regards, tom lane
Commits
-
Improve wording of some pg_upgrade failure reports.
- c9c37ae03fea 14.0 landed
-
Fix some more omissions in pg_upgrade's tests for non-upgradable types.
- 54a23307193c 9.6.22 landed
- d5722c92795d 10.17 landed
- bbcfee0e56a2 13.3 landed
- ba86371b9ca0 12.7 landed
- 57c081de0afc 14.0 landed
- 404946d40109 11.12 landed
-
Handle arrays and ranges in pg_upgrade's test for non-upgradable types.
- fb26754af4da 9.5.21 landed
- f378d4dac4ce 9.6.17 landed
- c443e3c43927 10.12 landed
- 8e4ef328738f 11.7 landed
- 56c06999d3c3 9.4.26 landed
- 29aeda6e4e60 13.0 landed
- 1cd57b05ef8b 12.2 landed