diff --git a/src/bin/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh index 0a4047ed7cb..b97d4e9af3c 100644 --- a/src/bin/pg_upgrade/test.sh +++ b/src/bin/pg_upgrade/test.sh @@ -184,16 +184,11 @@ if "$MAKE" -C "$oldsrc" installcheck; then # before dumping, get rid of objects not feasible in later versions if [ "$newsrc" != "$oldsrc" ]; then - fix_sql="" - case $oldpgversion in - 804??) - fix_sql="DROP FUNCTION public.myfunc(integer);" - ;; - esac - fix_sql="$fix_sql - DROP FUNCTION IF EXISTS - public.oldstyle_length(integer, text); -- last in 9.6"; - psql -X -d regression -c "$fix_sql;" || psql_fix_sql_status=$? + # This SQL script has its own idea of the cleanup that needs to be + # done on the cluster to-be-upgraded, and includes version checks. + # Note that this uses the script stored on the new branch. + psql -X -d regression -f "$newsrc/src/bin/pg_upgrade/upgrade_adapt.sql" \ + || psql_fix_sql_status=$? fi pg_dumpall --no-sync -f "$temp_root"/dump1.sql || pg_dumpall1_status=$? diff --git a/src/bin/pg_upgrade/upgrade_adapt.sql b/src/bin/pg_upgrade/upgrade_adapt.sql new file mode 100644 index 00000000000..8677a184bf2 --- /dev/null +++ b/src/bin/pg_upgrade/upgrade_adapt.sql @@ -0,0 +1,51 @@ +-- +-- SQL queries for upgrade tests across different major versions. +-- +-- This file includes a set of SQL queries to make a cluster to-be-upgraded +-- compatible with the version this file is based on. Note that this +-- requires psql, as per-version queries are controlled with a set of \if +-- clauses. + +-- This script is backward-compatible, so it is able to work with any version +-- newer than 9.2 we are upgrading from, up to the branch this script is stored +-- on (even if this would not run if running pg_upgrade with the same version +-- for the origin and the target). + +-- \if accepts a simple boolean value, so all the version checks are +-- saved based on this assumption. +SELECT + ver <= 902 AS oldpgversion_le92, + ver <= 904 AS oldpgversion_le94, + ver <= 906 AS oldpgversion_le96 + FROM (SELECT current_setting('server_version_num')::int / 100 AS ver) AS v; +\gset + +-- Objects last appearing in 9.2. +\if :oldpgversion_le92 +-- Note that those tables are removed from the regression tests in 9.3 +-- and newer versions. +DROP TABLE abstime_tbl; +DROP TABLE reltime_tbl; +DROP TABLE tinterval_tbl; +\endif + +-- Objects last appearing in 9.4. +\if :oldpgversion_le94 +-- This aggregate has been fixed in 9.5 and later versions, so drop +-- and re-create it. +DROP AGGREGATE array_cat_accum(anyarray); +CREATE AGGREGATE array_larger_accum (anyarray) ( + sfunc = array_larger, + stype = anyarray, + initcond = $${}$$); +-- This operator has been fixed in 9.5 and later versions, so drop and +-- re-create it. +DROP OPERATOR @#@ (NONE, bigint); +CREATE OPERATOR @#@ (PROCEDURE = factorial, + RIGHTARG = bigint); +\endif + +-- Objects last appearing in 9.6. +\if :oldpgversion_le96 +DROP FUNCTION public.oldstyle_length(integer, text); +\endif