[postgis-tickets] [SCM] PostGIS branch master updated. 3.3.0beta2-37-g2f08c4f1e

git at osgeo.org git at osgeo.org
Fri Aug 5 20:39:44 PDT 2022


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "PostGIS".

The branch, master has been updated
       via  2f08c4f1e916a0ff6412d4ee0980377e74e61d01 (commit)
      from  31070d07c9f01e90dcd188555eb821ea61a54a5d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 2f08c4f1e916a0ff6412d4ee0980377e74e61d01
Author: Regina Obe <lr at pcorp.us>
Date:   Fri Aug 5 23:36:11 2022 -0400

    1) Only use ANY option if superuser installing
    2) Don't allow downgrade
    3) Schema qual changes
    Closes #5194 for PostGIS 3.3.0
    Closes #5202 for PostGIS 3.3.0

diff --git a/postgis/postgis.sql.in b/postgis/postgis.sql.in
index 6644db42e..2c69ac5d6 100644
--- a/postgis/postgis.sql.in
+++ b/postgis/postgis.sql.in
@@ -2959,7 +2959,8 @@ CREATE OR REPLACE FUNCTION _postgis_scripts_pgsql_version() RETURNS text
 
 CREATE OR REPLACE FUNCTION _postgis_pgsql_version() RETURNS text
 AS $$
-	SELECT CASE WHEN split_part(s,'.',1)::integer > 9 THEN split_part(s,'.',1) || '0' ELSE split_part(s,'.', 1) || split_part(s,'.', 2) END AS v
+	SELECT CASE WHEN pg_catalog.split_part(s,'.',1)::integer > 9 THEN pg_catalog.split_part(s,'.',1) || '0'
+	ELSE pg_catalog.split_part(s,'.', 1) || pg_catalog.split_part(s,'.', 2) END AS v
 	FROM pg_catalog.substring(version(), 'PostgreSQL ([0-9\.]+)') AS s;
 $$ LANGUAGE 'sql' STABLE;
 
@@ -3049,15 +3050,34 @@ BEGIN
 				RAISE DEBUG 'Skipping % (not in use)', rec.name;
 			END IF;
 		ELSE -- IF target_version != rec.installed_version THEN --}{
-			sql = format(
-				'UPDATE pg_catalog.pg_extension SET extversion = ''ANY'' WHERE extname = %1$L;'
+			sql = '';
+			-- If logged in as super user
+			-- force an update regardless if at target version, no downgrade allowed
+			IF (SELECT usesuper FROM pg_user WHERE usename = CURRENT_USER)
+						AND pg_catalog.substring(target_version, '[0-9]+\.[0-9]+\.[0-9]+')
+								>= pg_catalog.substring(rec.installed_version, '[0-9]+\.[0-9]+\.[0-9]+') THEN
+					sql = format(
+						'UPDATE pg_catalog.pg_extension SET extversion = ''ANY'' WHERE extname = %1$L;'
+						'ALTER EXTENSION %1$I UPDATE TO %2$I',
+						rec.name, target_version
+				);
+			-- sandboxed users do standard upgrade
+			ELSIF pg_catalog.substring(target_version, '[0-9]+\.[0-9]+\.[0-9]+')
+								>= pg_catalog.substring(rec.installed_version, '[0-9]+\.[0-9]+\.[0-9]+') THEN
+				sql = format(
 				'ALTER EXTENSION %1$I UPDATE TO %2$I',
 				rec.name, target_version
-			);
-			RAISE NOTICE 'Updating extension % %',
-				rec.name, rec.installed_version;
-			RAISE DEBUG '%', sql;
-			EXECUTE sql;
+				);
+			END IF;
+			IF sql > '' THEN
+				RAISE NOTICE 'Updating extension % %',
+					rec.name, rec.installed_version;
+				RAISE DEBUG '%', sql;
+				EXECUTE sql;
+			ELSE
+				RAISE NOTICE 'Downgrade % from % to % not allowed',
+						rec.name, rec.installed_version, target_version;
+			END IF;
 		END IF; --}
 
 	END LOOP; --}

-----------------------------------------------------------------------

Summary of changes:
 postgis/postgis.sql.in | 36 ++++++++++++++++++++++++++++--------
 1 file changed, 28 insertions(+), 8 deletions(-)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list