diff --git a/src/bin/pg_upgrade/test.sh b/src/bin/pg_upgrade/test.sh index e9ce4370734..d4c4320a04f 100644 --- a/src/bin/pg_upgrade/test.sh +++ b/src/bin/pg_upgrade/test.sh @@ -186,16 +186,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..c67e6cd69b9 --- /dev/null +++ b/src/bin/pg_upgrade/upgrade_adapt.sql @@ -0,0 +1,58 @@ +-- +-- 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, + ver <= 1000 AS oldpgversion_le10 + 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 + +-- Objects last appearing in 10. +\if :oldpgversion_le10 +DROP FUNCTION IF EXISTS boxarea(box); +DROP FUNCTION IF EXISTS funny_dup17(); +\endif