Hello! On 01.07.2022 20:07, Justin Pryzby wrote:
Would you add this to to the (next) CF ?
Yes, i've put it on september CF.
It's silly to say that v9.2 will be supported potentially for a handful more years, but that the upgrade-testing script itself doesn't support that, so developers each have to reinvent its fixups.
I've test the attached patch in all variants from v9.5..15 to supported versions 10..master. The script test.sh for 9.5->10 and 9.6->10 upgrades works fine without any patch. In 9.4 there is a regress test largeobject to be patched to allow upgrade test from this version.So i've stopped at 9.5. This is clear that we limit the destination version for upgrade test to the supported versions only. In our case destination versions
starting from the 10th inclusively. But is there are a limit for the source version for upgrade test from?
Thanks a lot, i've add some code for 14+ from https://www.postgresql.org/message-id/flat/20220122183749.GO23027%40telsasoft.comSee also 20220122183749.go23...@telsasoft.com, where I proposed some of the same things.
to the attached patch. With best regards, -- Anton A. Melnikov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company
commit 8cba3ca4a68a0d41ff8ac4cd7c92546f093f8c4d Author: Anton A. Melnikov <a.melni...@postgrespro.ru> Date: Fri Jun 3 23:50:14 2022 +0300 Fix test for pg_upgrade from 10x and earlier versions. diff --git a/src/bin/pg_upgrade/t/002_pg_upgrade.pl b/src/bin/pg_upgrade/t/002_pg_upgrade.pl index 2f9b13bf0a..1fd1b6f028 100644 --- a/src/bin/pg_upgrade/t/002_pg_upgrade.pl +++ b/src/bin/pg_upgrade/t/002_pg_upgrade.pl @@ -60,7 +60,14 @@ my $oldnode = # To increase coverage of non-standard segment size and group access without # increasing test runtime, run these tests with a custom setting. # --allow-group-access and --wal-segsize have been added in v11. -$oldnode->init(extra => [ '--wal-segsize', '1', '--allow-group-access' ]); +my $ver_with_newopts = 11; +my $oldver = $oldnode->{_pg_version}; + +$oldnode->init(extra => [ '--wal-segsize', '1', '--allow-group-access' ]) + if $oldver >= $ver_with_newopts; +$oldnode->init() + if $oldver < $ver_with_newopts; + $oldnode->start; # The default location of the source code is the root of this directory. @@ -147,7 +154,10 @@ if (defined($ENV{oldinstall})) # Initialize a new node for the upgrade. my $newnode = PostgreSQL::Test::Cluster->new('new_node'); -$newnode->init(extra => [ '--wal-segsize', '1', '--allow-group-access' ]); +$newnode->init(extra => [ '--wal-segsize', '1', '--allow-group-access' ]) + if $oldver >= $ver_with_newopts; +$newnode->init() + if $oldver < $ver_with_newopts; my $newbindir = $newnode->config_data('--bindir'); my $oldbindir = $oldnode->config_data('--bindir'); diff --git a/src/bin/pg_upgrade/upgrade_adapt.sql b/src/bin/pg_upgrade/upgrade_adapt.sql index 27c4c7fd01..d47d2075f5 100644 --- a/src/bin/pg_upgrade/upgrade_adapt.sql +++ b/src/bin/pg_upgrade/upgrade_adapt.sql @@ -84,8 +84,8 @@ DO $stmt$ \if :oldpgversion_le13 -- Until v10, operators could only be dropped one at a time, so be careful -- to stick with one command for each drop here. -DROP OPERATOR public.#@# (pg_catalog.int8, NONE); -DROP OPERATOR public.#%# (pg_catalog.int8, NONE); -DROP OPERATOR public.!=- (pg_catalog.int8, NONE); -DROP OPERATOR public.#@%# (pg_catalog.int8, NONE); +DROP OPERATOR IF EXISTS public.#@# (pg_catalog.int8, NONE); +DROP OPERATOR IF EXISTS public.#%# (pg_catalog.int8, NONE); +DROP OPERATOR IF EXISTS public.!=- (pg_catalog.int8, NONE); +DROP OPERATOR IF EXISTS public.#@%# (pg_catalog.int8, NONE); \endif
commit bc69d06d6f5bdc31b60452d3af340e6af3faba31 Author: Anton A. Melnikov <a.melni...@postgrespro.ru> Date: Sat Jun 4 12:49:55 2022 +0300 Fix test for pg_upgrade from 10x versions. diff --git a/src/bin/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh index d4c4320a04..cc710633fb 100644 --- a/src/bin/pg_upgrade/test.sh +++ b/src/bin/pg_upgrade/test.sh @@ -23,7 +23,14 @@ standard_initdb() { # To increase coverage of non-standard segment size and group access # without increasing test runtime, run these tests with a custom setting. # Also, specify "-A trust" explicitly to suppress initdb's warning. - "$1" -N --wal-segsize 1 -g -A trust + # --allow-group-access and --wal-segsize have been added in v11. + initdbopt="-N -A trust" + if [ $OLD_PG_VERSION_NUM -ge 110000 ]; then + initdbopt="$initdbopt --wal-segsize 1 --allow-group-access" + fi + + "$1" $initdbopt + if [ -n "$TEMP_CONFIG" -a -r "$TEMP_CONFIG" ] then cat "$TEMP_CONFIG" >> "$PGDATA/postgresql.conf" @@ -145,6 +152,7 @@ PGHOSTADDR=""; unset PGHOSTADDR # Select a non-conflicting port number, similarly to pg_regress.c PG_VERSION_NUM=`grep '#define PG_VERSION_NUM' "$newsrc"/src/include/pg_config.h | awk '{print $3}'` +OLD_PG_VERSION_NUM=`grep '#define PG_VERSION_NUM' "$oldsrc"/src/include/pg_config.h | awk '{print $3}'` PGPORT=`expr $PG_VERSION_NUM % 16384 + 49152` export PGPORT @@ -237,18 +245,26 @@ pg_upgrade $PG_UPGRADE_OPTS -d "${PGDATA}.old" -D "$PGDATA" -b "$oldbindir" -B " # make sure all directories and files have group permissions, on Unix hosts # Windows hosts don't support Unix-y permissions. +if [ $OLD_PG_VERSION_NUM -lt 110000 ]; then + NEW_DIR_PERM=700 + NEW_FILE_PERM=600 +else + NEW_DIR_PERM=750 + NEW_FILE_PERM=640 +fi + case $testhost in MINGW*) ;; - *) if [ `find "$PGDATA" -type f ! -perm 640 | wc -l` -ne 0 ]; then - echo "files in PGDATA with permission != 640"; + *) if [ `find "$PGDATA" -type f ! -perm $NEW_FILE_PERM | wc -l` -ne 0 ]; then + echo "files in PGDATA with permission != $NEW_FILE_PERM"; exit 1; fi ;; esac case $testhost in MINGW*) ;; - *) if [ `find "$PGDATA" -type d ! -perm 750 | wc -l` -ne 0 ]; then - echo "directories in PGDATA with permission != 750"; + *) if [ `find "$PGDATA" -type d ! -perm $NEW_DIR_PERM | wc -l` -ne 0 ]; then + echo "directories in PGDATA with permission != $NEW_DIR_PERM"; exit 1; fi ;; esac
commit 9236b239921aa0946d1e87d908d41e57d442304f Author: Anton A. Melnikov <a.melni...@postgrespro.ru> Date: Tue Jul 5 07:14:34 2022 +0300 Fix test for pg_upgrade from 10x and some earlier versions. diff --git a/src/bin/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh index 7ca01ff38e..57787bba69 100644 --- a/src/bin/pg_upgrade/test.sh +++ b/src/bin/pg_upgrade/test.sh @@ -24,7 +24,13 @@ standard_initdb() { # without increasing test runtime, run these tests with a custom setting. # Also, specify "-A trust" explicitly to suppress initdb's warning. # --allow-group-access and --wal-segsize have been added in v11. - "$1" -N --wal-segsize 1 --allow-group-access -A trust + initdbopt="-N -A trust" + if [ $OLD_PG_VERSION_NUM -ge 110000 ]; then + initdbopt="$initdbopt --wal-segsize 1 --allow-group-access" + fi + + "$1" $initdbopt + if [ -n "$TEMP_CONFIG" -a -r "$TEMP_CONFIG" ] then cat "$TEMP_CONFIG" >> "$PGDATA/postgresql.conf" @@ -130,6 +136,7 @@ PGHOSTADDR=""; unset PGHOSTADDR # Select a non-conflicting port number, similarly to pg_regress.c PG_VERSION_NUM=`grep '#define PG_VERSION_NUM' "$newsrc"/src/include/pg_config.h | awk '{print $3}'` +OLD_PG_VERSION_NUM=`grep '#define PG_VERSION_NUM' "$oldsrc"/src/include/pg_config.h | awk '{print $3}'` PGPORT=`expr $PG_VERSION_NUM % 16384 + 49152` export PGPORT @@ -234,18 +241,26 @@ pg_upgrade $PG_UPGRADE_OPTS -d "${PGDATA}.old" -D "$PGDATA" -b "$oldbindir" -B " # make sure all directories and files have group permissions, on Unix hosts # Windows hosts don't support Unix-y permissions. +if [ $OLD_PG_VERSION_NUM -lt 110000 ]; then + NEW_DIR_PERM=700 + NEW_FILE_PERM=600 +else + NEW_DIR_PERM=750 + NEW_FILE_PERM=640 +fi + case $testhost in MINGW*) ;; - *) if [ `find "$PGDATA" -type f ! -perm 640 | wc -l` -ne 0 ]; then - echo "files in PGDATA with permission != 640"; + *) if [ `find "$PGDATA" -type f ! -perm $NEW_FILE_PERM | wc -l` -ne 0 ]; then + echo "files in PGDATA with permission != $NEW_FILE_PERM"; exit 1; fi ;; esac case $testhost in MINGW*) ;; - *) if [ `find "$PGDATA" -type d ! -perm 750 | wc -l` -ne 0 ]; then - echo "directories in PGDATA with permission != 750"; + *) if [ `find "$PGDATA" -type d ! -perm $NEW_DIR_PERM | wc -l` -ne 0 ]; then + echo "directories in PGDATA with permission != $NEW_DIR_PERM"; exit 1; fi ;; esac
commit cc306db88c5edfe74e9290796c0bfa8749c86d29 Author: Anton A. Melnikov <a.melni...@postgrespro.ru> Date: Sat Jun 4 12:24:16 2022 +0300 Fix test for pg_upgrade from 10x and earlier versions. diff --git a/src/bin/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh index 9f6fb3e018..4fc6e6657c 100644 --- a/src/bin/pg_upgrade/test.sh +++ b/src/bin/pg_upgrade/test.sh @@ -24,7 +24,13 @@ standard_initdb() { # without increasing test runtime, run these tests with a custom setting. # Also, specify "-A trust" explicitly to suppress initdb's warning. # --allow-group-access and --wal-segsize have been added in v11. - "$1" -N --wal-segsize 1 --allow-group-access -A trust + initdbopt="-N -A trust" + if [ $OLD_PG_VERSION_NUM -ge 110000 ]; then + initdbopt="$initdbopt --wal-segsize 1 --allow-group-access" + fi + + "$1" $initdbopt + if [ -n "$TEMP_CONFIG" -a -r "$TEMP_CONFIG" ] then cat "$TEMP_CONFIG" >> "$PGDATA/postgresql.conf" @@ -131,6 +137,7 @@ PGHOSTADDR=""; unset PGHOSTADDR # Select a non-conflicting port number, similarly to pg_regress.c PG_VERSION_NUM=`grep '#define PG_VERSION_NUM' "$newsrc"/src/include/pg_config.h | awk '{print $3}'` +OLD_PG_VERSION_NUM=`grep '#define PG_VERSION_NUM' "$oldsrc"/src/include/pg_config.h | awk '{print $3}'` PGPORT=`expr $PG_VERSION_NUM % 16384 + 49152` export PGPORT @@ -235,18 +242,26 @@ pg_upgrade $PG_UPGRADE_OPTS -d "${PGDATA}.old" -D "$PGDATA" -b "$oldbindir" -p " # make sure all directories and files have group permissions, on Unix hosts # Windows hosts don't support Unix-y permissions. +if [ $OLD_PG_VERSION_NUM -lt 110000 ]; then + NEW_DIR_PERM=700 + NEW_FILE_PERM=600 +else + NEW_DIR_PERM=750 + NEW_FILE_PERM=640 +fi + case $testhost in MINGW*) ;; - *) if [ `find "$PGDATA" -type f ! -perm 640 | wc -l` -ne 0 ]; then - echo "files in PGDATA with permission != 640"; + *) if [ `find "$PGDATA" -type f ! -perm $NEW_FILE_PERM | wc -l` -ne 0 ]; then + echo "files in PGDATA with permission != $NEW_FILE_PERM"; exit 1; fi ;; esac case $testhost in MINGW*) ;; - *) if [ `find "$PGDATA" -type d ! -perm 750 | wc -l` -ne 0 ]; then - echo "directories in PGDATA with permission != 750"; + *) if [ `find "$PGDATA" -type d ! -perm $NEW_DIR_PERM | wc -l` -ne 0 ]; then + echo "directories in PGDATA with permission != $NEW_DIR_PERM"; exit 1; fi ;; esac
commit 136bd56f358638524bc11a459724c8c5c7327005 Author: Anton A. Melnikov <a.melni...@postgrespro.ru> Date: Sat Jun 4 11:58:01 2022 +0300 Fix test for pg_upgrade from 10x and earlier versions. diff --git a/src/bin/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh index f353e565b5..ac9fc15646 100644 --- a/src/bin/pg_upgrade/test.sh +++ b/src/bin/pg_upgrade/test.sh @@ -24,7 +24,13 @@ standard_initdb() { # without increasing test runtime, run these tests with a custom setting. # Also, specify "-A trust" explicitly to suppress initdb's warning. # --allow-group-access and --wal-segsize have been added in v11. - "$1" -N --wal-segsize 1 --allow-group-access -A trust + initdbopt="-N -A trust" + if [ $OLD_PG_VERSION_NUM -ge 110000 ]; then + initdbopt="$initdbopt --wal-segsize 1 --allow-group-access" + fi + + "$1" $initdbopt + if [ -n "$TEMP_CONFIG" -a -r "$TEMP_CONFIG" ] then cat "$TEMP_CONFIG" >> "$PGDATA/postgresql.conf" @@ -136,6 +142,7 @@ PGHOSTADDR=""; unset PGHOSTADDR # Select a non-conflicting port number, similarly to pg_regress.c PG_VERSION_NUM=`grep '#define PG_VERSION_NUM' "$newsrc"/src/include/pg_config.h | awk '{print $3}'` +OLD_PG_VERSION_NUM=`grep '#define PG_VERSION_NUM' "$oldsrc"/src/include/pg_config.h | awk '{print $3}'` PGPORT=`expr $PG_VERSION_NUM % 16384 + 49152` export PGPORT @@ -240,18 +247,26 @@ pg_upgrade $PG_UPGRADE_OPTS -d "${PGDATA}.old" -D "$PGDATA" -b "$oldbindir" -p " # make sure all directories and files have group permissions, on Unix hosts # Windows hosts don't support Unix-y permissions. +if [ $OLD_PG_VERSION_NUM -lt 110000 ]; then + NEW_DIR_PERM=700 + NEW_FILE_PERM=600 +else + NEW_DIR_PERM=750 + NEW_FILE_PERM=640 +fi + case $testhost in MINGW*|CYGWIN*) ;; - *) if [ `find "$PGDATA" -type f ! -perm 640 | wc -l` -ne 0 ]; then - echo "files in PGDATA with permission != 640"; + *) if [ `find "$PGDATA" -type f ! -perm $NEW_FILE_PERM | wc -l` -ne 0 ]; then + echo "files in PGDATA with permission != $NEW_FILE_PERM"; exit 1; fi ;; esac case $testhost in MINGW*|CYGWIN*) ;; - *) if [ `find "$PGDATA" -type d ! -perm 750 | wc -l` -ne 0 ]; then - echo "directories in PGDATA with permission != 750"; + *) if [ `find "$PGDATA" -type d ! -perm $NEW_DIR_PERM | wc -l` -ne 0 ]; then + echo "directories in PGDATA with permission != $NEW_DIR_PERM"; exit 1; fi ;; esac diff --git a/src/bin/pg_upgrade/upgrade_adapt.sql b/src/bin/pg_upgrade/upgrade_adapt.sql index 27c4c7fd01..d47d2075f5 100644 --- a/src/bin/pg_upgrade/upgrade_adapt.sql +++ b/src/bin/pg_upgrade/upgrade_adapt.sql @@ -84,8 +84,8 @@ DO $stmt$ \if :oldpgversion_le13 -- Until v10, operators could only be dropped one at a time, so be careful -- to stick with one command for each drop here. -DROP OPERATOR public.#@# (pg_catalog.int8, NONE); -DROP OPERATOR public.#%# (pg_catalog.int8, NONE); -DROP OPERATOR public.!=- (pg_catalog.int8, NONE); -DROP OPERATOR public.#@%# (pg_catalog.int8, NONE); +DROP OPERATOR IF EXISTS public.#@# (pg_catalog.int8, NONE); +DROP OPERATOR IF EXISTS public.#%# (pg_catalog.int8, NONE); +DROP OPERATOR IF EXISTS public.!=- (pg_catalog.int8, NONE); +DROP OPERATOR IF EXISTS public.#@%# (pg_catalog.int8, NONE); \endif
commit 1101b263ceb0009b495706e25b7aad569e2f78ce Author: Anton A. Melnikov <a.melni...@postgrespro.ru> Date: Fri Jun 3 23:50:14 2022 +0300 Fix test for pg_upgrade from 10x adn earlier versions. diff --git a/src/bin/pg_upgrade/t/002_pg_upgrade.pl b/src/bin/pg_upgrade/t/002_pg_upgrade.pl index 2f9b13bf0a..1fd1b6f028 100644 --- a/src/bin/pg_upgrade/t/002_pg_upgrade.pl +++ b/src/bin/pg_upgrade/t/002_pg_upgrade.pl @@ -60,7 +60,14 @@ my $oldnode = # To increase coverage of non-standard segment size and group access without # increasing test runtime, run these tests with a custom setting. # --allow-group-access and --wal-segsize have been added in v11. -$oldnode->init(extra => [ '--wal-segsize', '1', '--allow-group-access' ]); +my $ver_with_newopts = 11; +my $oldver = $oldnode->{_pg_version}; + +$oldnode->init(extra => [ '--wal-segsize', '1', '--allow-group-access' ]) + if $oldver >= $ver_with_newopts; +$oldnode->init() + if $oldver < $ver_with_newopts; + $oldnode->start; # The default location of the source code is the root of this directory. @@ -147,7 +154,10 @@ if (defined($ENV{oldinstall})) # Initialize a new node for the upgrade. my $newnode = PostgreSQL::Test::Cluster->new('new_node'); -$newnode->init(extra => [ '--wal-segsize', '1', '--allow-group-access' ]); +$newnode->init(extra => [ '--wal-segsize', '1', '--allow-group-access' ]) + if $oldver >= $ver_with_newopts; +$newnode->init() + if $oldver < $ver_with_newopts; my $newbindir = $newnode->config_data('--bindir'); my $oldbindir = $oldnode->config_data('--bindir'); diff --git a/src/bin/pg_upgrade/upgrade_adapt.sql b/src/bin/pg_upgrade/upgrade_adapt.sql index 27c4c7fd01..d47d2075f5 100644 --- a/src/bin/pg_upgrade/upgrade_adapt.sql +++ b/src/bin/pg_upgrade/upgrade_adapt.sql @@ -84,8 +84,8 @@ DO $stmt$ \if :oldpgversion_le13 -- Until v10, operators could only be dropped one at a time, so be careful -- to stick with one command for each drop here. -DROP OPERATOR public.#@# (pg_catalog.int8, NONE); -DROP OPERATOR public.#%# (pg_catalog.int8, NONE); -DROP OPERATOR public.!=- (pg_catalog.int8, NONE); -DROP OPERATOR public.#@%# (pg_catalog.int8, NONE); +DROP OPERATOR IF EXISTS public.#@# (pg_catalog.int8, NONE); +DROP OPERATOR IF EXISTS public.#%# (pg_catalog.int8, NONE); +DROP OPERATOR IF EXISTS public.!=- (pg_catalog.int8, NONE); +DROP OPERATOR IF EXISTS public.#@%# (pg_catalog.int8, NONE); \endif