| -- |
| -- 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', 'f') |
| ORDER BY 1 |
| LOOP |
| EXECUTE 'ALTER TABLE ' || quote_ident(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 |