diff options
Diffstat (limited to 'src/bin/pg_upgrade/upgrade_adapt.sql')
-rw-r--r-- | src/bin/pg_upgrade/upgrade_adapt.sql | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/bin/pg_upgrade/upgrade_adapt.sql b/src/bin/pg_upgrade/upgrade_adapt.sql new file mode 100644 index 0000000..27c4c7f --- /dev/null +++ b/src/bin/pg_upgrade/upgrade_adapt.sql @@ -0,0 +1,91 @@ +-- +-- 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, + ver <= 1100 AS oldpgversion_le11, + ver <= 1300 AS oldpgversion_le13 + 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 + +-- Objects last appearing in 11. +\if :oldpgversion_le11 +-- WITH OIDS is supported until v11, so remove its support for any +-- relations marked as such. +DO $stmt$ + DECLARE + rec text; + BEGIN + FOR rec in + SELECT oid::regclass::text + FROM pg_class + WHERE relname !~ '^pg_' + AND relhasoids + AND relkind in ('r','m') + ORDER BY 1 + LOOP + execute 'ALTER TABLE ' || rec || ' SET WITHOUT OIDS'; + END LOOP; + END; $stmt$; +\endif + +-- Objects last appearing in 13. +\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); +\endif |