File: check_extension_downgrades.sql

package info (click to toggle)
postgis 3.5.2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 70,052 kB
  • sloc: ansic: 162,204; sql: 93,950; xml: 53,121; cpp: 12,646; perl: 5,658; sh: 5,369; makefile: 3,434; python: 1,205; yacc: 447; lex: 151; pascal: 58
file content (47 lines) | stat: -rw-r--r-- 1,174 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
DO $SQL$
DECLARE
	rec RECORD;
	sql TEXT;
	test_ext TEXT;
	from_version TEXT;
BEGIN

	-- TODO: test all extensions ?
	test_ext := 'postgis';

	FOR rec IN
		SELECT * FROM pg_available_extension_versions
		WHERE name = test_ext
		AND version NOT LIKE '%next'
		AND version NOT IN ( 'unpackaged', 'ANY')
		ORDER BY string_to_array(
			regexp_replace(version, '[^0-9.]', '', 'g'), '.'
		)::int[] DESC
	LOOP
		IF from_version IS NULL THEN
			from_version := rec.version;
			sql := format('CREATE EXTENSION %I VERSION %L', test_ext, from_version);
			EXECUTE sql;
		ELSE
			sql := format('ALTER EXTENSION %I UPDATE TO %L', test_ext, rec.version);
			BEGIN
				EXECUTE sql;
				-- expect error like Downgrade of postgis from version 3.4.0dev 3.3.0rc2-808-g6080076af to version 3.3.3dev is forbidden
			EXCEPTION WHEN OTHERS THEN
				IF SQLERRM LIKE 'Downgrade % is forbidden' THEN
					RAISE NOTICE 'PASS: %', SQLERRM;
				ELSE
					RAISE EXCEPTION 'FAIL: % to % downgrade was not handled: %',
						from_version, rec.version, SQLERRM;
				END IF;
			END;
		END IF;
	END LOOP;

	sql := format('DROP EXTENSION IF EXISTS %I', test_ext);
	EXECUTE sql;

END

$SQL$ LANGUAGE 'plpgsql';