From ccf3408cff539d21256f14a350dd156c8bee05ef Mon Sep 17 00:00:00 2001 From: Daniel Gustafsson Date: Fri, 17 May 2024 14:24:27 +0200 Subject: [PATCH] Refuse upgrades from pre-9.0 clusters Commit 695b4a113ab added a dependency on retrieving oldestxid from pg_control, which only exists in 9.0 and onwards, but the check for 8.4 as the oldest version was retained. Since there has been few if any complaints of 8.4 upgrades not working, fix by setting 9.0 as the oldest version supported rather than resurrecting 8.4 support. Backpatch to all supported versions. Reviewed-by: Tom Lane Discussion: https://postgr.es/m/1973418.1657040382@sss.pgh.pa.us Backpatch-through: v12 --- doc/src/sgml/ref/pgupgrade.sgml | 2 +- src/bin/pg_upgrade/check.c | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/doc/src/sgml/ref/pgupgrade.sgml b/doc/src/sgml/ref/pgupgrade.sgml index d401053edf..8add90e8ed 100644 --- a/doc/src/sgml/ref/pgupgrade.sgml +++ b/doc/src/sgml/ref/pgupgrade.sgml @@ -67,7 +67,7 @@ PostgreSQL documentation - pg_upgrade supports upgrades from 8.4.X and later to the current + pg_upgrade supports upgrades from 9.0.X and later to the current major release of PostgreSQL, including snapshot and beta releases. diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c index dc060418e5..26dae5681a 100644 --- a/src/bin/pg_upgrade/check.c +++ b/src/bin/pg_upgrade/check.c @@ -316,8 +316,13 @@ check_cluster_versions(void) * upgrades */ - if (GET_MAJOR_VERSION(old_cluster.major_version) < 804) - pg_fatal("This utility can only upgrade from PostgreSQL version 8.4 and later.\n"); + /* + * The minimum version supported when this code shipped in a major version + * was 8.4. This has since been raised to 9.0, but the support code for + * dealing with 8.4 remains to avoid refactoring in a backbranch. + */ + if (GET_MAJOR_VERSION(old_cluster.major_version) < 900) + pg_fatal("This utility can only upgrade from PostgreSQL version 9.0 and later.\n"); /* Only current PG version is supported as a target */ if (GET_MAJOR_VERSION(new_cluster.major_version) != GET_MAJOR_VERSION(PG_VERSION_NUM))