Re: pg_upgrade fails to detect unsupported arrays and ranges
Daniel Gustafsson <daniel@yesql.se>
From: Daniel Gustafsson <daniel@yesql.se>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>,
Tomas Vondra <tomas.vondra@enterprisedb.com>
Date: 2021-04-28T20:38:28Z
Lists: pgsql-hackers
> On 28 Apr 2021, at 17:09, Tom Lane <tgl@sss.pgh.pa.us> wrote:
>
> [ 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:
Nice find, this makes a lot of sense.
> ..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.
Agreed. Having implemented basically this for Greenplum I think it’s wise to
avoid it unless we really have to, it gets very complicated once the layers of
worms are peeled back.
> 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.
Patch LGTM on reading, +1 on applying. Being on parental leave I don’t have my
dev env ready to go so I didn’t perform testing; sorry about that.
> + pg_fatal("Your installation contains system-defined composite type(s) in user tables.\n"
> + "These type OIDs are not stable across PostgreSQL versions,\n"
> + "so this cluster cannot currently be upgraded. You can\n"
> + "remove the problem tables and restart the upgrade.\n"
> + "A list of the problem columns is in the file:\n"
Would it be helpful to inform the user that they can alter/drop just the
problematic columns as a potentially less scary alternative to dropping the
entire table?
> - * The type of interest might be wrapped in a domain, array,
> + * The types of interest might be wrapped in a domain, array,
Shouldn't this be "type(s)” as in the other changes here?
--
Daniel Gustafsson https://vmware.com/
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