bump minimum supported version of psql and pg_{dump,dumpall,upgrade} to v10

Started by Nathan Bossartabout 2 months ago13 messageshackers
Jump to latest
#1Nathan Bossart
nathandbossart@gmail.com

(This is for v20.)

I've brought this up a couple times in the past ~year, so here's a patch.
Supporting versions as old as v9.2 has become quite cumbersome, requiring
various version-specific branches and hacks. I believe our current policy
is that we support at least 10 previous major versions [0]/messages/by-id/d0316012-ece7-7b7e-2d36-9c38cb77cb3b@enterprisedb.com. For reference,
we last bumped the minimum to v9.2 in 2021 (commits 30e7c175b81,
e469f0aaf3, and cf0cab868a).

From "git show --stat":
16 files changed, 569 insertions(+), 1836 deletions(-)

Thoughts?

[0]: /messages/by-id/d0316012-ece7-7b7e-2d36-9c38cb77cb3b@enterprisedb.com

--
nathan

Attachments:

v1-0001-remove-pg_dump-pg_dumpall-and-pg_upgrade-support-.patchtext/plain; charset=us-asciiDownload+569-1837
#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Nathan Bossart (#1)
Re: bump minimum supported version of psql and pg_{dump,dumpall,upgrade} to v10

Nathan Bossart <nathandbossart@gmail.com> writes:

I've brought this up a couple times in the past ~year, so here's a patch.
Supporting versions as old as v9.2 has become quite cumbersome, requiring
various version-specific branches and hacks. I believe our current policy
is that we support at least 10 previous major versions [0]. For reference,
we last bumped the minimum to v9.2 in 2021 (commits 30e7c175b 81,
e469f0aaf3, and cf0cab868a).

I'm on board with this for v20, but as a matter of reviewing the
patch: it'd be easier if you separated it into two steps, one that
does the actual changes but doesn't reindent anything, and then a
separate application of pgindent. As this diff stands, there's an
awful lot of noise resulting from outdenting no-longer-conditional
code, which has to be reviewed by hand but it could be checked
mechanically if you left it to a "this just applies pgindent" step.

Looking at the commit log, I was struck by my comment in 30e7c175b:

(As in previous changes of
this sort, we aren't removing pg_restore's ability to read older
archive files ... though it's fair to wonder how that might be
tested nowadays.)

I wonder whether we ought to sunset some of that code too, and
if so how to draw the line on minimum archive version to support.

BTW, see also 492046fa9.

regards, tom lane

#3Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#2)
Re: bump minimum supported version of psql and pg_{dump,dumpall,upgrade} to v10

On 2026-04-08 We 12:23 PM, Tom Lane wrote:

Nathan Bossart <nathandbossart@gmail.com> writes:

I've brought this up a couple times in the past ~year, so here's a patch.
Supporting versions as old as v9.2 has become quite cumbersome, requiring
various version-specific branches and hacks. I believe our current policy
is that we support at least 10 previous major versions [0]. For reference,
we last bumped the minimum to v9.2 in 2021 (commits 30e7c175b 81,
e469f0aaf3, and cf0cab868a).

I'm on board with this for v20, but as a matter of reviewing the
patch: it'd be easier if you separated it into two steps, one that
does the actual changes but doesn't reindent anything, and then a
separate application of pgindent. As this diff stands, there's an
awful lot of noise resulting from outdenting no-longer-conditional
code, which has to be reviewed by hand but it could be checked
mechanically if you left it to a "this just applies pgindent" step.

Looking at the commit log, I was struck by my comment in 30e7c175b:

(As in previous changes of
this sort, we aren't removing pg_restore's ability to read older
archive files ... though it's fair to wonder how that might be
tested nowadays.)

I wonder whether we ought to sunset some of that code too, and
if so how to draw the line on minimum archive version to support.

BTW, see also 492046fa9.

I'm on board, if for no other reason than that it will shorten some of
my animals' buildfarm runs. I guess people wanting to upgrade from
ancient versions can do it in multiple hops. At the same time, I
wouldn't want to do this every year. It's been 5 years since he last
time we did this, and that seems about the right interval.

I guess I'll have to teach the buildfarm's cross-version upgrade module
what old versions are supported by which release.

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

#4Corey Huinker
corey.huinker@gmail.com
In reply to: Andrew Dunstan (#3)
Re: bump minimum supported version of psql and pg_{dump,dumpall,upgrade} to v10

I wonder whether we ought to sunset some of that code too, and
if so how to draw the line on minimum archive version to support.

I'm assuming that the need to restore such very old dumpfiles is forensic
or compliance in nature, so we'd want to give people some recourse for
those files going forward.

I guess people wanting to upgrade from
ancient versions can do it in multiple hops.

+1

It would help if we provided some small documentation on how to do that. It
could be as simple as a docbook table mapping various postgres versions to
the highest version a) a live database can be pg_upgraded to and b) a
dumpfile can be pg_restored to. But it could also include a script to
re-dump an old dumpfile to a newer dump version. I'd be happy to take a
swing at that if nobody else is interested.

At the same time, I
wouldn't want to do this every year. It's been 5 years since he last
time we did this, and that seems about the right interval.

+1 to a 5 year cadence.

I guess I'll have to teach the buildfarm's cross-version upgrade module
what old versions are supported by which release.

Which is a second use for that table I just proposed.

#5Nathan Bossart
nathandbossart@gmail.com
In reply to: Andrew Dunstan (#3)
Re: bump minimum supported version of psql and pg_{dump,dumpall,upgrade} to v10

On Wed, Apr 08, 2026 at 12:42:21PM -0400, Andrew Dunstan wrote:

On 2026-04-08 We 12:23 PM, Tom Lane wrote:

I'm on board with this for v20, but as a matter of reviewing the
patch: it'd be easier if you separated it into two steps, one that
does the actual changes but doesn't reindent anything, and then a
separate application of pgindent. As this diff stands, there's an
awful lot of noise resulting from outdenting no-longer-conditional
code, which has to be reviewed by hand but it could be checked
mechanically if you left it to a "this just applies pgindent" step.

Will do. There's also various code consolidation throughout, so I suspect
this will become ~3 patches in the end.

Looking at the commit log, I was struck by my comment in 30e7c175b:

(As in previous changes of
this sort, we aren't removing pg_restore's ability to read older
archive files ... though it's fair to wonder how that might be
tested nowadays.)

I wonder whether we ought to sunset some of that code too, and
if so how to draw the line on minimum archive version to support.

K_VERS_1_12 was added in 2010 for v9.0, and K_VERS_1_13 was added in 2018
for v11. The latter is within our 10 release window for pg_dump, etc., and
the former is well beyond it. So, K_VERS_1_12 is probably the latest we
could bump it to. I suspect that'd be fine, but we might still want to
consider choosing an earlier version out of an abundance of caution.
Perhaps our policy could be something like past-15-major-releases for
pg_restore.

BTW, see also 492046fa9.

Noted.

I'm on board, if for no other reason than that it will shorten some of my
animals' buildfarm runs. I guess people wanting to upgrade from ancient
versions can do it in multiple hops. At the same time, I wouldn't want to do
this every year. It's been 5 years since he last time we did this, and that
seems about the right interval.

Yeah, I think this is where we ultimately landed in a previous discussion
on Discord.

--
nathan

#6Tom Lane
tgl@sss.pgh.pa.us
In reply to: Nathan Bossart (#5)
Re: bump minimum supported version of psql and pg_{dump,dumpall,upgrade} to v10

Nathan Bossart <nathandbossart@gmail.com> writes:

On Wed, Apr 08, 2026 at 12:42:21PM -0400, Andrew Dunstan wrote:

On 2026-04-08 We 12:23 PM, Tom Lane wrote:

Looking at the commit log, I was struck by my comment in 30e7c175b:
(As in previous changes of
this sort, we aren't removing pg_restore's ability to read older
archive files ... though it's fair to wonder how that might be
tested nowadays.)
I wonder whether we ought to sunset some of that code too, and
if so how to draw the line on minimum archive version to support.

K_VERS_1_12 was added in 2010 for v9.0, and K_VERS_1_13 was added in 2018
for v11. The latter is within our 10 release window for pg_dump, etc., and
the former is well beyond it. So, K_VERS_1_12 is probably the latest we
could bump it to. I suspect that'd be fine, but we might still want to
consider choosing an earlier version out of an abundance of caution.
Perhaps our policy could be something like past-15-major-releases for
pg_restore.

Yeah. In 64f3524e2 I said

I did not remove the ability for pg_restore to read custom-format archives
generated by these old versions (and light testing says that that does
still work). If you have an old server, you probably also have a pg_dump
that will work with it; but you have an old custom-format backup file,
that might be all you have.

That reasoning still holds, so we ought to be a bit more reluctant to
remove archive-version support than server-version support. However,
carrying ancient code we can't test anymore isn't attractive either.

BTW, I think this is actually more complicated than just looking for
code that's conditional on K_VERS_x; there's not that much of that
anyway, if memory serves. What could get rid of more code is looking
for places that support TOC entry types we no longer generate, or work
around bugs we no longer have. Finding such places is tricky though.
A starting point might be to examine the code coverage report for
unexercised stanzas in pg_restore.

Another related point, which doesn't really concern this code-ectomy
project but is relevant to Corey's idea of making a table of supported
upgrade paths, is that we've also made server-side changes that affect
dump/restore compatibility. The ones I found in a quick search
were v13's e58a59975, 84eca14bc, bb03010b9, but there are probably
more.

regards, tom lane

#7Nathan Bossart
nathandbossart@gmail.com
In reply to: Corey Huinker (#4)
Re: bump minimum supported version of psql and pg_{dump,dumpall,upgrade} to v10

On Wed, Apr 08, 2026 at 01:24:29PM -0400, Corey Huinker wrote:

It would help if we provided some small documentation on how to do that. It
could be as simple as a docbook table mapping various postgres versions to
the highest version a) a live database can be pg_upgraded to and b) a
dumpfile can be pg_restored to. But it could also include a script to
re-dump an old dumpfile to a newer dump version. I'd be happy to take a
swing at that if nobody else is interested.

I like these ideas. IMHO this helps us be reasonably aggressive about
removing support for ancient versions while still providing a lifeboat when
folks using those ancient versions decide to upgrade.

--
nathan

#8Nathan Bossart
nathandbossart@gmail.com
In reply to: Nathan Bossart (#7)
Re: bump minimum supported version of psql and pg_{dump,dumpall,upgrade} to v10

I wrote a new set of patches on a plane a couple of weeks ago, but I forgot
to post them. I'm not yet 100% positive I've got the changes to
rewrite_multixacts() in the pg_upgrade patch correct, but otherwise it's
pretty mechanical and straightforward.

--
nathan

Attachments:

v2-0001-pg_dump-pg_dumpall-bump-minimum-supported-version.patchtext/plain; charset=us-asciiDownload+22-357
v2-0002-pg_upgrade-bump-minimum-supported-version-to-v10.patchtext/plain; charset=us-asciiDownload+16-578
v2-0003-psql-bump-minimum-supported-version-to-v10.patchtext/plain; charset=us-asciiDownload+11-270
v2-0004-run-pgindent.patchtext/plain; charset=us-asciiDownload+578-582
#9Nathan Bossart
nathandbossart@gmail.com
In reply to: Nathan Bossart (#8)
Re: bump minimum supported version of psql and pg_{dump,dumpall,upgrade} to v10

On Fri, May 01, 2026 at 03:10:51PM -0500, Nathan Bossart wrote:

I wrote a new set of patches on a plane a couple of weeks ago, but I forgot
to post them. I'm not yet 100% positive I've got the changes to
rewrite_multixacts() in the pg_upgrade patch correct, but otherwise it's
pretty mechanical and straightforward.

Best I can tell, the rewrite_multixacts() changes are fine. I also noticed
a couple of accidental removals of v11 stuff in the psql patch, which
should be fixed in the attached.

--
nathan

Attachments:

v3-0001-pg_dump-pg_dumpall-bump-minimum-supported-version.patchtext/plain; charset=us-asciiDownload+22-357
v3-0002-pg_upgrade-bump-minimum-supported-version-to-v10.patchtext/plain; charset=us-asciiDownload+16-578
v3-0003-psql-bump-minimum-supported-version-to-v10.patchtext/plain; charset=us-asciiDownload+11-259
v3-0004-run-pgindent.patchtext/plain; charset=us-asciiDownload+567-571
#10Andrew Dunstan
andrew@dunslane.net
In reply to: Nathan Bossart (#9)
Re: bump minimum supported version of psql and pg_{dump,dumpall,upgrade} to v10

On 2026-05-06 We 5:47 PM, Nathan Bossart wrote:

On Fri, May 01, 2026 at 03:10:51PM -0500, Nathan Bossart wrote:

I wrote a new set of patches on a plane a couple of weeks ago, but I forgot
to post them. I'm not yet 100% positive I've got the changes to
rewrite_multixacts() in the pg_upgrade patch correct, but otherwise it's
pretty mechanical and straightforward.

Best I can tell, the rewrite_multixacts() changes are fine. I also noticed
a couple of accidental removals of v11 stuff in the psql patch, which
should be fixed in the attached.

Have we made a definite decision on this? If so, I will push the
buildfarm change I have ready for it, so when we pull the trigger we
don't get breakage.

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

#11Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#10)
Re: bump minimum supported version of psql and pg_{dump,dumpall,upgrade} to v10

Andrew Dunstan <andrew@dunslane.net> writes:

Have we made a definite decision on this? If so, I will push the
buildfarm change I have ready for it, so when we pull the trigger we
don't get breakage.

I think we've agreed to do this for v20. (I've not reviewed the
proposed patch, so that's not an endorsement of the patch details.)
Getting out ahead of that in the buildfarm would be a good thing.

regards, tom lane

#12Nathan Bossart
nathandbossart@gmail.com
In reply to: Tom Lane (#11)
Re: bump minimum supported version of psql and pg_{dump,dumpall,upgrade} to v10

On Sat, May 16, 2026 at 09:42:47AM -0400, Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

Have we made a definite decision on this? If so, I will push the
buildfarm change I have ready for it, so when we pull the trigger we
don't get breakage.

I think we've agreed to do this for v20. (I've not reviewed the
proposed patch, so that's not an endorsement of the patch details.)
Getting out ahead of that in the buildfarm would be a good thing.

+1

--
nathan

#13Andrew Dunstan
andrew@dunslane.net
In reply to: Nathan Bossart (#12)
Re: bump minimum supported version of psql and pg_{dump,dumpall,upgrade} to v10

On 2026-05-16 Sa 9:44 AM, Nathan Bossart wrote:

On Sat, May 16, 2026 at 09:42:47AM -0400, Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

Have we made a definite decision on this? If so, I will push the
buildfarm change I have ready for it, so when we pull the trigger we
don't get breakage.

I think we've agreed to do this for v20. (I've not reviewed the
proposed patch, so that's not an endorsement of the patch details.)
Getting out ahead of that in the buildfarm would be a good thing.

+1

OK, I have pushed that. See
<https://github.com/PGBuildFarm/client-code/commit/4c3ed0c37bbcaf427e61384bb351364ecae9b4d9&gt;

crake will be immediately affected on HEAD. I'll make a new release when
we branch the tree.

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com