[postgis-tickets] [SCM] PostGIS branch master updated. 3.2.0-264-g95bedd94b

git at osgeo.org git at osgeo.org
Mon Jan 17 05:53:12 PST 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  95bedd94bb4415caa7941c4af719f8d5d2b3fa31 (commit)
      from  bf01900ee942146f4acdcab7c87dabf76ad93cea (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 95bedd94bb4415caa7941c4af719f8d5d2b3fa31
Author: Sandro Santilli <strk at kbt.io>
Date:   Sat Jan 15 18:54:37 2022 +0100

    Rewrite _postgis_drop_if_needed to avoid expanding DEFAULT values
    
    This prevents the function to fail when geometry canonical output
    function is non-functional (maybe due to lack of library on system).
    
    References #5046 in master branch
    
    Includes regression testing, which now avoid keeping geometry_out
    functional.

diff --git a/postgis/postgis_before_upgrade.sql b/postgis/postgis_before_upgrade.sql
index ea84c524f..437476be0 100644
--- a/postgis/postgis_before_upgrade.sql
+++ b/postgis/postgis_before_upgrade.sql
@@ -37,34 +37,29 @@ CREATE OR REPLACE FUNCTION _postgis_drop_function_if_needed(
 	function_name text,
 	function_arguments text) RETURNS void AS $$
 DECLARE
-	frec RECORD;
 	sql_drop text;
+	postgis_namespace OID;
+	matching_function REGPROCEDURE;
 BEGIN
-	FOR frec IN
-		SELECT  p.oid as oid,
-				n.nspname as schema,
-				n.oid as schema_oid,
-				p.proname as name,
-				pg_catalog.pg_get_function_arguments(p.oid) as arguments,
-				pg_catalog.pg_get_function_identity_arguments(p.oid) as identity_arguments
-			FROM pg_catalog.pg_proc p
-			LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
-			WHERE
-				n.oid = (
-					SELECT n.oid
-					FROM pg_proc p
-					JOIN pg_namespace n ON p.pronamespace = n.oid
-					WHERE proname = 'postgis_full_version'
-					) AND
-				LOWER(p.proname) = LOWER(function_name) AND
-				LOWER(pg_catalog.pg_get_function_arguments(p.oid)) ~ LOWER(function_arguments) AND
-				pg_catalog.pg_function_is_visible(p.oid)
-			ORDER BY 1, 2, 4
-	LOOP
-		sql_drop := 'DROP FUNCTION ' || quote_ident(frec.schema) || '.' || quote_ident(frec.name) || ' ( ' || frec.identity_arguments || ' ) ';
-		RAISE DEBUG 'Name (%): %', frec.oid, frec.name;
-		RAISE DEBUG 'Arguments: %', frec.arguments;
-		RAISE DEBUG 'Identity arguments: %', frec.identity_arguments;
+
+	-- Fetch install namespace for PostGIS
+	SELECT n.oid
+	FROM pg_catalog.pg_proc p
+	JOIN pg_catalog.pg_namespace n ON p.pronamespace = n.oid
+	WHERE proname = 'postgis_full_version'
+	INTO postgis_namespace;
+
+	-- Find a function matching the given signature
+	SELECT oid
+	FROM pg_catalog.pg_proc p
+	WHERE pronamespace = postgis_namespace
+	AND LOWER(p.proname) = LOWER(function_name)
+	AND pg_catalog.pg_function_is_visible(p.oid)
+	AND LOWER(pg_catalog.pg_get_function_identity_arguments(p.oid)) ~ LOWER(function_arguments)
+	INTO matching_function;
+
+	IF matching_function IS NOT NULL THEN
+		sql_drop := 'DROP FUNCTION ' || matching_function;
 		RAISE DEBUG 'SQL query: %', sql_drop;
 		BEGIN
 			EXECUTE sql_drop;
@@ -72,7 +67,8 @@ BEGIN
 			WHEN OTHERS THEN
 				RAISE EXCEPTION 'Could not drop function %. You might need to drop dependant objects. Postgres error: %', function_name, SQLERRM;
 		END;
-	END LOOP;
+	END IF;
+
 END;
 $$ LANGUAGE plpgsql;
 
diff --git a/regress/hooks/hook-before-upgrade.sql b/regress/hooks/hook-before-upgrade.sql
index 2dcddaf4b..7185b56bc 100644
--- a/regress/hooks/hook-before-upgrade.sql
+++ b/regress/hooks/hook-before-upgrade.sql
@@ -77,10 +77,5 @@ FROM upgrade_test;
 
 -- Break probin of all postgis functions, as we expect
 -- the upgrade procedure to replace them all
-UPDATE pg_proc SET probin = probin || '-uninstalled' WHERE probin like '%postgis%'
--- Some function have DEFAULT values for GEOMETRY type, which
--- makes pg_get_function_arguments choke. This should be fixed!
--- See https://trac.osgeo.org/postgis/ticket/5046#comment:5
--- When ticket #5046 is fixed we can ALSO break geometry_out
-AND proname NOT IN ( 'geometry_out')
-;
+UPDATE pg_proc SET probin = probin || '-uninstalled'
+WHERE probin like '%postgis%';

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

Summary of changes:
 postgis/postgis_before_upgrade.sql    | 50 ++++++++++++++++-------------------
 regress/hooks/hook-before-upgrade.sql |  9 ++-----
 2 files changed, 25 insertions(+), 34 deletions(-)


hooks/post-receive
-- 
PostGIS


More information about the postgis-tickets mailing list