[postgis-tickets] r15041 - schema qualify function and operator calls in geometry and geography functions

Regina Obe lr at pcorp.us
Sat Aug 6 06:05:05 PDT 2016


Author: robe
Date: 2016-08-06 06:05:04 -0700 (Sat, 06 Aug 2016)
New Revision: 15041

Modified:
   trunk/NEWS
   trunk/extensions/postgis/Makefile.in
   trunk/postgis/Makefile.in
   trunk/postgis/geography.sql.in
   trunk/postgis/postgis.sql.in
Log:
 schema qualify function and operator calls in geometry and geography functions
Closes #3496
Closes #3494
Closes #3486
Closes #3076

Modified: trunk/NEWS
===================================================================
--- trunk/NEWS	2016-08-05 14:55:45 UTC (rev 15040)
+++ trunk/NEWS	2016-08-06 13:05:04 UTC (rev 15041)
@@ -37,6 +37,8 @@
   - #3557, Geometry function costs based on query stats (Paul Norman)
   - #3591, Add support for BRIN indexes 
 		  (Giuseppe Broccolo of 2nd Quadrant, Julien Rouhaud and Ronan Dunklau of Dalibo)
+  - #3496 Make postgis non-relocateable (for extension install), schema qualify calls in functions (Regina Obe)
+		Should resolve once and for all for extensions #3494, #3486, #3076 
 
  * Performance Enhancements *
 

Modified: trunk/extensions/postgis/Makefile.in
===================================================================
--- trunk/extensions/postgis/Makefile.in	2016-08-05 14:55:45 UTC (rev 15040)
+++ trunk/extensions/postgis/Makefile.in	2016-08-06 13:05:04 UTC (rev 15041)
@@ -61,7 +61,7 @@
 	$(PERL) -pe 's/BEGIN\;//g ; s/COMMIT\;//g' $< > $@
 
 #strip BEGIN/COMMIT since these are not allowed in extensions
-sql_bits/postgis.sql: ../../postgis/postgis.sql
+sql_bits/postgis.sql: ../../postgis/postgis_for_extension.sql
 	mkdir -p sql_bits/
 	$(PERL) -pe 's/BEGIN\;//g ; s/COMMIT\;//g' $< > $@
 
@@ -84,7 +84,7 @@
 sql_bits/rtpostgis_upgrade.sql: ../../raster/rt_pg/rtpostgis_upgrade_for_extension.sql 
 	$(PERL) -pe "s/BEGIN\;//g ; s/COMMIT\;//g; s/^(DROP .*)\;/SELECT postgis_extension_drop_if_exists('$(EXTENSION)', '\1');\n\1\;/" $< > $@
 
-sql_bits/postgis_upgrade.sql: ../../postgis/postgis_upgrade.sql
+sql_bits/postgis_upgrade.sql: ../../postgis/postgis_upgrade_for_extension.sql
 	$(PERL) -pe "s/BEGIN\;//g ; s/COMMIT\;//g; s/^(DROP .*)\;/SELECT postgis_extension_drop_if_exists('$(EXTENSION)', '\1');\n\1\;/" $< > $@
 
 

Modified: trunk/postgis/Makefile.in
===================================================================
--- trunk/postgis/Makefile.in	2016-08-05 14:55:45 UTC (rev 15040)
+++ trunk/postgis/Makefile.in	2016-08-06 13:05:04 UTC (rev 15041)
@@ -27,11 +27,11 @@
 MODULEDIR=contrib/$(MODULE_big)
 
 # Files to be copied to the contrib/ directory
-SQL_built=postgis.sql uninstall_postgis.sql postgis_upgrade.sql postgis_proc_set_search_path.sql legacy.sql uninstall_legacy.sql legacy_minimal.sql legacy_gist.sql 
+SQL_built=postgis.sql postgis_for_extension.sql uninstall_postgis.sql postgis_upgrade.sql postgis_upgrade_for_extension.sql postgis_proc_set_search_path.sql legacy.sql uninstall_legacy.sql legacy_minimal.sql legacy_gist.sql 
 DATA=../spatial_ref_sys.sql
 
 # SQL objects (files requiring pre-processing)
-SQL_objs=postgis.sql legacy.sql legacy_minimal.sql
+SQL_objs=postgis.sql postgis_for_extension.sql legacy.sql legacy_minimal.sql
 
 GEOM_BACKEND_OBJ = lwgeom_geos.o
 SFCGAL_BACKEND_OBJ = lwgeom_sfcgal.o
@@ -171,13 +171,26 @@
 
 # Borrow the $libdir substitution from PGXS but customise by running the preprocessor
 # and adding the version number
+# replace @extschema at . with nothing, this is only used as placeholder for extension install
 %.sql: %.sql.in
 	$(SQLPP) -I../libpgcommon $< | grep -v '^#' | \
+	$(PERL) -lpe "s'MODULE_PATHNAME'\$$libdir/postgis- at POSTGIS_MAJOR_VERSION@. at POSTGIS_MINOR_VERSION@'g;s'@extschema@\.''g" > $@
+	
+postgis_upgrade_for_extension.sql: postgis_upgrade_for_extension.sql.in
+	$(SQLPP) -I../libpgcommon $< | grep -v '^#' | \
 	$(PERL) -lpe "s'MODULE_PATHNAME'\$$libdir/postgis- at POSTGIS_MAJOR_VERSION@. at POSTGIS_MINOR_VERSION@'g" > $@
+	
+postgis_for_extension.sql: postgis.sql.in
+	$(SQLPP) -I../libpgcommon $< | grep -v '^#' | \
+	$(PERL) -lpe "s'MODULE_PATHNAME'\$$libdir/postgis- at POSTGIS_MAJOR_VERSION@. at POSTGIS_MINOR_VERSION@'g" > $@
 
+#this is redundant but trying to fold in with extension just hangs
 postgis_upgrade.sql.in: postgis.sql ../utils/postgis_proc_upgrade.pl
 	$(PERL) ../utils/postgis_proc_upgrade.pl $< UNUSED > $@
 	
+postgis_upgrade_for_extension.sql.in: postgis_for_extension.sql ../utils/postgis_proc_upgrade.pl
+	$(PERL) ../utils/postgis_proc_upgrade.pl $< UNUSED > $@
+	
 postgis_proc_set_search_path.sql: postgis.sql ../utils/postgis_proc_set_search_path.pl
 	$(PERL) ../utils/postgis_proc_set_search_path.pl $< UNUSED > $@
 

Modified: trunk/postgis/geography.sql.in
===================================================================
--- trunk/postgis/geography.sql.in	2016-08-05 14:55:45 UTC (rev 15040)
+++ trunk/postgis/geography.sql.in	2016-08-06 13:05:04 UTC (rev 15041)
@@ -107,7 +107,7 @@
 -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography
 CREATE OR REPLACE FUNCTION ST_AsText(text)
 	RETURNS text AS
-	$$ SELECT ST_AsText($1::geometry);  $$
+	$$ SELECT ST_AsText($1::@extschema at .geometry);  $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.5.0
@@ -319,7 +319,7 @@
 CREATE OR REPLACE FUNCTION overlaps_geog(geography, gidx)
 RETURNS boolean
 AS $$
-  SELECT $2 && $1;
+  SELECT $2 OPERATOR(@extschema at .&&) $1;
 $$ LANGUAGE SQL IMMUTABLE STRICT;
 
 -- Availability: 2.3.0
@@ -484,7 +484,7 @@
 -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography
 CREATE OR REPLACE FUNCTION ST_AsSVG(text)
 	RETURNS text AS
-	$$ SELECT ST_AsSVG($1::geometry,0,15);  $$
+	$$ SELECT ST_AsSVG($1::@extschema at .geometry,0,15);  $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 --
@@ -501,7 +501,7 @@
 -- Change 2.0.0 to use base function
 CREATE OR REPLACE FUNCTION ST_AsGML(text)
 	RETURNS text AS
-	$$ SELECT _ST_AsGML(2,$1::geometry,15,0, NULL, NULL);  $$
+	$$ SELECT @extschema at ._ST_AsGML(2,$1::@extschema at .geometry,15,0, NULL, NULL);  $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- ST_AsGML (geography, precision, option) / version=2
@@ -509,7 +509,7 @@
 -- Changed: 2.0.0 to use default args
 CREATE OR REPLACE FUNCTION ST_AsGML(geog geography, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0)
 	RETURNS text
-	AS 'SELECT _ST_AsGML(2, $1, $2, $3, null, null)'
+	AS 'SELECT @extschema at ._ST_AsGML(2, $1, $2, $3, null, null)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- ST_AsGML(version, geography, precision, option, prefix)
@@ -518,7 +518,7 @@
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_AsGML(version int4, geog geography, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0, nprefix text DEFAULT NULL, id text DEFAULT NULL)
 	RETURNS text
-	AS $$ SELECT _ST_AsGML($1, $2, $3, $4, $5, $6);$$
+	AS $$ SELECT @extschema at ._ST_AsGML($1, $2, $3, $4, $5, $6);$$
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 --
@@ -535,14 +535,14 @@
 -- Changed: 2.0.0 to use default args and named args
 CREATE OR REPLACE FUNCTION ST_AsKML(geog geography, maxdecimaldigits int4 DEFAULT 15)
 	RETURNS text
-	AS 'SELECT _ST_AsKML(2, $1, $2, null)'
+	AS 'SELECT @extschema at ._ST_AsKML(2, $1, $2, null)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography
 -- Deprecated 2.0.0
 CREATE OR REPLACE FUNCTION ST_AsKML(text)
 	RETURNS text AS
-	$$ SELECT _ST_AsKML(2, $1::geometry, 15, null);  $$
+	$$ SELECT @extschema at ._ST_AsKML(2, $1::@extschema at .geometry, 15, null);  $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- ST_AsKML(version, geography, precision, prefix)
@@ -550,7 +550,7 @@
 -- Changed: 2.0.0 to use default args and named args
 CREATE OR REPLACE FUNCTION ST_AsKML(version int4, geog geography, maxdecimaldigits int4 DEFAULT 15, nprefix text DEFAULT null)
 	RETURNS text
-	AS 'SELECT _ST_AsKML($1, $2, $3, $4)'
+	AS 'SELECT @extschema at ._ST_AsKML($1, $2, $3, $4)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 --
@@ -566,21 +566,21 @@
 -- Deprecated in 2.0.0
 CREATE OR REPLACE FUNCTION ST_AsGeoJson(text)
 	RETURNS text AS
-	$$ SELECT _ST_AsGeoJson(1, $1::geometry,15,0);  $$
+	$$ SELECT @extschema at ._ST_AsGeoJson(1, $1::@extschema at .geometry,15,0);  $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- ST_AsGeoJson(geography, precision, options) / version=1
 -- Changed: 2.0.0 to use default args and named args
 CREATE OR REPLACE FUNCTION ST_AsGeoJson(geog geography, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0)
 	RETURNS text
-	AS $$ SELECT _ST_AsGeoJson(1, $1, $2, $3); $$
+	AS $$ SELECT @extschema at ._ST_AsGeoJson(1, $1, $2, $3); $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- ST_AsGeoJson(version, geography, precision,options)
 -- Changed: 2.0.0 to use default args and named args
 CREATE OR REPLACE FUNCTION ST_AsGeoJson(gj_version int4, geog geography, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0)
 	RETURNS text
-	AS $$ SELECT _ST_AsGeoJson($1, $2, $3, $4); $$
+	AS $$ SELECT @extschema at ._ST_AsGeoJson($1, $2, $3, $4); $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- ---------- ---------- ---------- ---------- ---------- ---------- ----------
@@ -607,20 +607,20 @@
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_Distance(geography, geography, boolean)
 	RETURNS float8
-	AS 'SELECT _ST_Distance($1, $2, 0.0, $3)'
+	AS 'SELECT @extschema at ._ST_Distance($1, $2, 0.0, $3)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Currently defaulting to spheroid calculations
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_Distance(geography, geography)
 	RETURNS float8
-	AS 'SELECT _ST_Distance($1, $2, 0.0, true)'
+	AS 'SELECT @extschema at ._ST_Distance($1, $2, 0.0, true)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 	
 -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography
 CREATE OR REPLACE FUNCTION ST_Distance(text, text)
 	RETURNS float8 AS
-	$$ SELECT ST_Distance($1::geometry, $2::geometry);  $$
+	$$ SELECT ST_Distance($1::@extschema at .geometry, $2::@extschema at .geometry);  $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Only expands the bounding box, the actual geometry will remain unchanged, use with care.
@@ -634,20 +634,20 @@
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_DWithin(geography, geography, float8, boolean)
 	RETURNS boolean
-	AS 'SELECT $1 && _ST_Expand($2,$3) AND $2 && _ST_Expand($1,$3) AND _ST_DWithin($1, $2, $3, $4)'
+	AS 'SELECT $1 OPERATOR(@extschema at .&&) @extschema at ._ST_Expand($2,$3) AND $2 OPERATOR(@extschema at .&&) @extschema at ._ST_Expand($1,$3) AND @extschema at ._ST_DWithin($1, $2, $3, $4)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Currently defaulting to spheroid calculations
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_DWithin(geography, geography, float8)
 	RETURNS boolean
-	AS 'SELECT $1 && _ST_Expand($2,$3) AND $2 && _ST_Expand($1,$3) AND _ST_DWithin($1, $2, $3, true)'
+	AS 'SELECT $1 OPERATOR(@extschema at .&&) @extschema at ._ST_Expand($2,$3) AND $2 OPERATOR(@extschema at .&&) @extschema at ._ST_Expand($1,$3) AND @extschema at ._ST_DWithin($1, $2, $3, true)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography
 CREATE OR REPLACE FUNCTION ST_DWithin(text, text, float8)
 	RETURNS boolean AS
-	$$ SELECT ST_DWithin($1::geometry, $2::geometry, $3);  $$
+	$$ SELECT ST_DWithin($1::@extschema at .geometry, $2::@extschema at .geometry, $3);  $$
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 
@@ -666,13 +666,13 @@
 -- Calculate the distance in geographics *without* using the caching code line or tree code
 CREATE OR REPLACE FUNCTION _ST_DistanceUnCached(geography, geography, boolean)
 	RETURNS float8
-	AS 'SELECT _ST_DistanceUnCached($1, $2, 0.0, $3)'
+	AS 'SELECT @extschema at ._ST_DistanceUnCached($1, $2, 0.0, $3)'
 	LANGUAGE 'sql' IMMUTABLE STRICT;
 
 -- Calculate the distance in geographics *without* using the caching code line or tree code
 CREATE OR REPLACE FUNCTION _ST_DistanceUnCached(geography, geography)
 	RETURNS float8
-	AS 'SELECT _ST_DistanceUnCached($1, $2, 0.0, true)'
+	AS 'SELECT @extschema at ._ST_DistanceUnCached($1, $2, 0.0, true)'
 	LANGUAGE 'sql' IMMUTABLE STRICT;
 
 -- Calculate the distance in geographics using the circular tree code, but 
@@ -687,7 +687,7 @@
 -- *without* using the caching code line
 CREATE OR REPLACE FUNCTION _ST_DistanceTree(geography, geography)
 	RETURNS float8
-	AS 'SELECT _ST_DistanceTree($1, $2, 0.0, true)'
+	AS 'SELECT @extschema at ._ST_DistanceTree($1, $2, 0.0, true)'
 	LANGUAGE 'sql' IMMUTABLE STRICT;
 
 -- Calculate the dwithin relation *without* using the caching code line or tree code
@@ -700,7 +700,7 @@
 -- Calculate the dwithin relation *without* using the caching code line or tree code
 CREATE OR REPLACE FUNCTION _ST_DWithinUnCached(geography, geography, float8)
 	RETURNS boolean
-	AS 'SELECT $1 && _ST_Expand($2,$3) AND $2 && _ST_Expand($1,$3) AND _ST_DWithinUnCached($1, $2, $3, true)'
+	AS 'SELECT $1 OPERATOR(@extschema at .&&) @extschema at ._ST_Expand($2,$3) AND $2 OPERATOR(@extschema at .&&) @extschema at ._ST_Expand($1,$3) AND @extschema at ._ST_DWithinUnCached($1, $2, $3, true)'
 	LANGUAGE 'sql' IMMUTABLE;
 	
 -- ---------- ---------- ---------- ---------- ---------- ---------- ----------
@@ -715,7 +715,7 @@
 -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography
 CREATE OR REPLACE FUNCTION ST_Area(text)
 	RETURNS float8 AS
-	$$ SELECT ST_Area($1::geometry);  $$
+	$$ SELECT ST_Area($1::@extschema at .geometry);  $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.5.0
@@ -728,7 +728,7 @@
 -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography
 CREATE OR REPLACE FUNCTION ST_Length(text)
 	RETURNS float8 AS
-	$$ SELECT ST_Length($1::geometry);  $$
+	$$ SELECT ST_Length($1::@extschema at .geometry);  $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 2.0.0
@@ -770,26 +770,26 @@
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_Covers(geography, geography)
 	RETURNS boolean
-	AS 'SELECT $1 && $2 AND _ST_Covers($1, $2)'
+	AS 'SELECT $1 OPERATOR(@extschema at .&&) $2 AND @extschema at ._ST_Covers($1, $2)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography
 CREATE OR REPLACE FUNCTION ST_Covers(text, text)
 	RETURNS boolean AS
-	$$ SELECT ST_Covers($1::geometry, $2::geometry);  $$
+	$$ SELECT ST_Covers($1::@extschema at .geometry, $2::@extschema at .geometry);  $$
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Only implemented for polygon-over-point
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_CoveredBy(geography, geography)
 	RETURNS boolean
-	AS 'SELECT $1 && $2 AND _ST_Covers($2, $1)'
+	AS 'SELECT $1 OPERATOR(@extschema at .&&) $2 AND @extschema at ._ST_Covers($2, $1)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography
 CREATE OR REPLACE FUNCTION ST_CoveredBy(text, text)
 	RETURNS boolean AS
-	$$ SELECT ST_CoveredBy($1::geometry, $2::geometry);  $$
+	$$ SELECT ST_CoveredBy($1::@extschema at .geometry, $2::@extschema at .geometry);  $$
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Availability: 2.1.0
@@ -802,13 +802,13 @@
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_Intersects(geography, geography)
 	RETURNS boolean
-	AS 'SELECT $1 && $2 AND _ST_Distance($1, $2, 0.0, false) < 0.00001'
+	AS 'SELECT $1 OPERATOR(@extschema at .&&) $2 AND @extschema at ._ST_Distance($1, $2, 0.0, false) < 0.00001'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography
 CREATE OR REPLACE FUNCTION ST_Intersects(text, text)
 	RETURNS boolean AS
-	$$ SELECT ST_Intersects($1::geometry, $2::geometry);  $$
+	$$ SELECT ST_Intersects($1::@extschema at .geometry, $2::@extschema at .geometry);  $$
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Availability: 1.5.0
@@ -820,55 +820,55 @@
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION _ST_BestSRID(geography)
 	RETURNS integer
-	AS 'SELECT _ST_BestSRID($1,$1)'
+	AS 'SELECT @extschema at ._ST_BestSRID($1,$1)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_Buffer(geography, float8)
 	RETURNS geography
-	AS 'SELECT geography(ST_Transform(ST_Buffer(ST_Transform(geometry($1), _ST_BestSRID($1)), $2), 4326))'
+	AS 'SELECT geography(ST_Transform(ST_Buffer(ST_Transform(geometry($1), @extschema at ._ST_BestSRID($1)), $2), 4326))'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 2.3.x
 CREATE OR REPLACE FUNCTION ST_Buffer(geography, float8, integer)
 	RETURNS geography
-	AS 'SELECT geography(ST_Transform(ST_Buffer(ST_Transform(geometry($1), _ST_BestSRID($1)), $2, $3), 4326))'
+	AS 'SELECT geography(ST_Transform(ST_Buffer(ST_Transform(geometry($1), @extschema at ._ST_BestSRID($1)), $2, $3), 4326))'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 2.3.x
 CREATE OR REPLACE FUNCTION ST_Buffer(geography, float8, text)
 	RETURNS geography
-	AS 'SELECT geography(ST_Transform(ST_Buffer(ST_Transform(geometry($1), _ST_BestSRID($1)), $2, $3), 4326))'
+	AS 'SELECT geography(ST_Transform(ST_Buffer(ST_Transform(geometry($1), @extschema at ._ST_BestSRID($1)), $2, $3), 4326))'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography
 CREATE OR REPLACE FUNCTION ST_Buffer(text, float8)
 	RETURNS geometry AS
-	$$ SELECT ST_Buffer($1::geometry, $2);  $$
+	$$ SELECT ST_Buffer($1::@extschema at .geometry, $2);  $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 2.3.x
 CREATE OR REPLACE FUNCTION ST_Buffer(text, float8, integer)
 	RETURNS geometry AS
-	$$ SELECT ST_Buffer($1::geometry, $2, $3);  $$
+	$$ SELECT ST_Buffer($1::@extschema at .geometry, $2, $3);  $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 2.3.x
 CREATE OR REPLACE FUNCTION ST_Buffer(text, float8, text)
 	RETURNS geometry AS
-	$$ SELECT ST_Buffer($1::geometry, $2, $3);  $$
+	$$ SELECT ST_Buffer($1::@extschema at .geometry, $2, $3);  $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_Intersection(geography, geography)
 	RETURNS geography
-	AS 'SELECT geography(ST_Transform(ST_Intersection(ST_Transform(geometry($1), _ST_BestSRID($1, $2)), ST_Transform(geometry($2), _ST_BestSRID($1, $2))), 4326))'
+	AS 'SELECT geography(ST_Transform(ST_Intersection(ST_Transform(geometry($1), @extschema at ._ST_BestSRID($1, $2)), ST_Transform(geometry($2), @extschema at ._ST_BestSRID($1, $2))), 4326))'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.5.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography
 CREATE OR REPLACE FUNCTION ST_Intersection(text, text)
 	RETURNS geometry AS
-	$$ SELECT ST_Intersection($1::geometry, $2::geometry);  $$
+	$$ SELECT @extschema at .ST_Intersection($1::@extschema at .geometry, $2::@extschema at .geometry);  $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.5.0
@@ -880,7 +880,7 @@
 -- Availability: 2.0.0
 CREATE OR REPLACE FUNCTION ST_AsBinary(geography,text)
 	RETURNS bytea AS
-	$$ SELECT ST_AsBinary($1::geometry, $2);  $$
+	$$ SELECT @extschema at .ST_AsBinary($1::@extschema at .geometry, $2);  $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 2.0.0
@@ -892,7 +892,7 @@
 -- Availability: 2.0.0 - this is just a hack to prevent unknown from causing ambiguous name because of geography
 CREATE OR REPLACE FUNCTION ST_AsEWKT(text)
 	RETURNS text AS
-	$$ SELECT ST_AsEWKT($1::geometry);  $$
+	$$ SELECT @extschema at .ST_AsEWKT($1::@extschema at .geometry);  $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 2.0.0

Modified: trunk/postgis/postgis.sql.in
===================================================================
--- trunk/postgis/postgis.sql.in	2016-08-05 14:55:45 UTC (rev 15040)
+++ trunk/postgis/postgis.sql.in	2016-08-06 13:05:04 UTC (rev 15041)
@@ -896,8 +896,8 @@
 -- Deprecation in 2.2.0
 CREATE OR REPLACE FUNCTION ST_Shift_Longitude(geometry)
 	RETURNS geometry AS
-  $$ SELECT _postgis_deprecate('ST_Shift_Longitude', 'ST_ShiftLongitude', '2.2.0');
-    SELECT ST_ShiftLongitude($1);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Shift_Longitude', 'ST_ShiftLongitude', '2.2.0');
+    SELECT @extschema at .ST_ShiftLongitude($1);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -986,10 +986,10 @@
 -- Availability: 1.2.2
 -- Deprecation in 2.1.0
 CREATE OR REPLACE FUNCTION ST_estimated_extent(text,text,text) RETURNS box2d AS
-  $$ SELECT _postgis_deprecate('ST_Estimated_Extent', 'ST_EstimatedExtent', '2.1.0');
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Estimated_Extent', 'ST_EstimatedExtent', '2.1.0');
     -- We use security invoker instead of security definer
     -- to prevent malicious injection of a different same named function
-    SELECT ST_EstimatedExtent($1, $2, $3);
+    SELECT @extschema at .ST_EstimatedExtent($1, $2, $3);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT SECURITY INVOKER;
 
@@ -1005,11 +1005,11 @@
 -- Availability: 1.2.2
 -- Deprecation in 2.1.0
 CREATE OR REPLACE FUNCTION ST_estimated_extent(text,text) RETURNS box2d AS
-  $$ SELECT _postgis_deprecate('ST_Estimated_Extent', 'ST_EstimatedExtent', '2.1.0');
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Estimated_Extent', 'ST_EstimatedExtent', '2.1.0');
     -- We use security invoker instead of security definer
     -- to prevent malicious injection of a same named different function
     -- that would be run under elevated permissions
-    SELECT ST_EstimatedExtent($1, $2);
+    SELECT @extschema at .ST_EstimatedExtent($1, $2);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT SECURITY INVOKER;
 
@@ -1026,7 +1026,7 @@
 	columnname alias for $3;
 	myrec RECORD;
 BEGIN
-	FOR myrec IN EXECUTE 'SELECT ST_Extent("' || columnname || '") As extent FROM "' || schemaname || '"."' || tablename || '"' LOOP
+	FOR myrec IN EXECUTE 'SELECT @extschema at .ST_Extent("' || columnname || '") As extent FROM "' || schemaname || '"."' || tablename || '"' LOOP
 		return myrec.extent;
 	END LOOP;
 END;
@@ -1036,8 +1036,8 @@
 -- Availability: 1.2.2
 -- Deprecation in 2.2.0
 CREATE OR REPLACE FUNCTION ST_find_extent(text,text,text) RETURNS box2d AS
-  $$ SELECT _postgis_deprecate('ST_Find_Extent', 'ST_FindExtent', '2.2.0');
-    SELECT ST_FindExtent($1,$2,$3);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Find_Extent', 'ST_FindExtent', '2.2.0');
+    SELECT @extschema at .ST_FindExtent($1,$2,$3);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -1054,7 +1054,7 @@
 	myrec RECORD;
 
 BEGIN
-	FOR myrec IN EXECUTE 'SELECT ST_Extent("' || columnname || '") As extent FROM "' || tablename || '"' LOOP
+	FOR myrec IN EXECUTE 'SELECT @extschema at .ST_Extent("' || columnname || '") As extent FROM "' || tablename || '"' LOOP
 		return myrec.extent;
 	END LOOP;
 END;
@@ -1064,8 +1064,8 @@
 -- Availability: 1.2.2
 -- Deprecation in 2.2.0
 CREATE OR REPLACE FUNCTION ST_find_extent(text,text) RETURNS box2d AS
-  $$ SELECT _postgis_deprecate('ST_Find_Extent', 'ST_FindExtent', '2.2.0');
-    SELECT ST_FindExtent($1,$2);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Find_Extent', 'ST_FindExtent', '2.2.0');
+    SELECT @extschema at .ST_FindExtent($1,$2);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -1106,8 +1106,8 @@
 -- Deprecation in 2.2.0
 CREATE OR REPLACE FUNCTION ST_mem_size(geometry)
 	RETURNS int4 AS
-  $$ SELECT _postgis_deprecate('ST_Mem_Size', 'ST_MemSize', '2.2.0');
-    SELECT ST_MemSize($1);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Mem_Size', 'ST_MemSize', '2.2.0');
+    SELECT @extschema at .ST_MemSize($1);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT SECURITY INVOKER;
 
@@ -1168,8 +1168,8 @@
 -- Deprecation in 2.2.0
 CREATE OR REPLACE FUNCTION ST_3DLength_spheroid(geometry, spheroid)
 	RETURNS FLOAT8 AS
-  $$ SELECT _postgis_deprecate('ST_3DLength_Spheroid', 'ST_LengthSpheroid', '2.2.0');
-    SELECT ST_LengthSpheroid($1,$2);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_3DLength_Spheroid', 'ST_LengthSpheroid', '2.2.0');
+    SELECT @extschema at .ST_LengthSpheroid($1,$2);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT
 	COST 100;
@@ -1179,8 +1179,8 @@
 -- Deprecation in 2.2.0
 CREATE OR REPLACE FUNCTION ST_length_spheroid(geometry, spheroid)
 	RETURNS FLOAT8 AS
-  $$ SELECT _postgis_deprecate('ST_Length_Spheroid', 'ST_LengthSpheroid', '2.2.0');
-    SELECT ST_LengthSpheroid($1,$2);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Length_Spheroid', 'ST_LengthSpheroid', '2.2.0');
+    SELECT @extschema at .ST_LengthSpheroid($1,$2);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -1195,8 +1195,8 @@
 -- Deprecation in 2.2.0
 CREATE OR REPLACE FUNCTION ST_length2d_spheroid(geometry, spheroid)
 	RETURNS FLOAT8 AS
-  $$ SELECT _postgis_deprecate('ST_Length2D_Spheroid', 'ST_Length2DSpheroid', '2.2.0');
-    SELECT ST_Length2DSpheroid($1,$2);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Length2D_Spheroid', 'ST_Length2DSpheroid', '2.2.0');
+    SELECT @extschema at .ST_Length2DSpheroid($1,$2);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -1247,8 +1247,8 @@
 -- Deprecation in 2.2.0
 CREATE OR REPLACE FUNCTION ST_distance_spheroid(geom1 geometry, geom2 geometry,spheroid)
 	RETURNS FLOAT8 AS
-  $$ SELECT _postgis_deprecate('ST_Distance_Spheroid', 'ST_DistanceSpheroid', '2.2.0');
-    SELECT ST_DistanceSpheroid($1,$2,$3);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Distance_Spheroid', 'ST_DistanceSpheroid', '2.2.0');
+    SELECT @extschema at .ST_DistanceSpheroid($1,$2,$3);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -1271,8 +1271,8 @@
 -- Deprecation in 2.2.0
 CREATE OR REPLACE FUNCTION ST_point_inside_circle(geometry,float8,float8,float8)
 	RETURNS bool AS
-  $$ SELECT _postgis_deprecate('ST_Point_Inside_Circle', 'ST_PointInsideCircle', '2.2.0');
-    SELECT ST_PointInsideCircle($1,$2,$3,$4);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Point_Inside_Circle', 'ST_PointInsideCircle', '2.2.0');
+    SELECT @extschema at .ST_PointInsideCircle($1,$2,$3,$4);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -1297,8 +1297,8 @@
 -- Deprecation in 2.1.0
 CREATE OR REPLACE FUNCTION ST_force_2d(geometry)
 	RETURNS geometry AS
-  $$ SELECT _postgis_deprecate('ST_Force_2d', 'ST_Force2D', '2.1.0');
-    SELECT ST_Force2D($1);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Force_2d', 'ST_Force2D', '2.1.0');
+    SELECT @extschema at .ST_Force2D($1);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -1313,8 +1313,8 @@
 -- Deprecation in 2.1.0
 CREATE OR REPLACE FUNCTION ST_force_3dz(geometry)
 	RETURNS geometry AS
-  $$ SELECT _postgis_deprecate('ST_Force_3dz', 'ST_Force3DZ', '2.1.0');
-    SELECT ST_Force3DZ($1);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Force_3dz', 'ST_Force3DZ', '2.1.0');
+    SELECT @extschema at .ST_Force3DZ($1);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -1329,8 +1329,8 @@
 -- Deprecation in 2.1.0
 CREATE OR REPLACE FUNCTION ST_force_3d(geometry)
 	RETURNS geometry AS
-  $$ SELECT _postgis_deprecate('ST_Force_3d', 'ST_Force3D', '2.1.0');
-    SELECT ST_Force3D($1);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Force_3d', 'ST_Force3D', '2.1.0');
+    SELECT @extschema at .ST_Force3D($1);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -1345,8 +1345,8 @@
 -- Deprecation in 2.1.0
 CREATE OR REPLACE FUNCTION ST_force_3dm(geometry)
 	RETURNS geometry AS
-  $$ SELECT _postgis_deprecate('ST_Force_3dm', 'ST_Force3DM', '2.1.0');
-    SELECT ST_Force3DM($1);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Force_3dm', 'ST_Force3DM', '2.1.0');
+    SELECT @extschema at .ST_Force3DM($1);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -1361,8 +1361,8 @@
 -- Deprecation in 2.1.0
 CREATE OR REPLACE FUNCTION ST_force_4d(geometry)
 	RETURNS geometry AS
-  $$ SELECT _postgis_deprecate('ST_Force_4d', 'ST_Force4D', '2.1.0');
-    SELECT ST_Force4D($1);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Force_4d', 'ST_Force4D', '2.1.0');
+    SELECT @extschema at .ST_Force4D($1);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -1377,8 +1377,8 @@
 -- Deprecation in 2.1.0
 CREATE OR REPLACE FUNCTION ST_force_collection(geometry)
 	RETURNS geometry AS
-  $$ SELECT _postgis_deprecate('ST_Force_Collection', 'ST_ForceCollection', '2.1.0');
-    SELECT ST_ForceCollection($1);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Force_Collection', 'ST_ForceCollection', '2.1.0');
+    SELECT @extschema at .ST_ForceCollection($1);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -1740,55 +1740,55 @@
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_Affine(geometry,float8,float8,float8,float8,float8,float8)
 	RETURNS geometry
-	AS 'SELECT ST_Affine($1,  $2, $3, 0,  $4, $5, 0,  0, 0, 1,  $6, $7, 0)'
+	AS 'SELECT @extschema at .ST_Affine($1,  $2, $3, 0,  $4, $5, 0,  0, 0, 1,  $6, $7, 0)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_Rotate(geometry,float8)
 	RETURNS geometry
-	AS 'SELECT ST_Affine($1,  cos($2), -sin($2), 0,  sin($2), cos($2), 0,  0, 0, 1,  0, 0, 0)'
+	AS 'SELECT @extschema at .ST_Affine($1,  cos($2), -sin($2), 0,  sin($2), cos($2), 0,  0, 0, 1,  0, 0, 0)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 2.0.0
 CREATE OR REPLACE FUNCTION ST_Rotate(geometry,float8,float8,float8)
 	RETURNS geometry
-	AS 'SELECT ST_Affine($1,  cos($2), -sin($2), 0,  sin($2),  cos($2), 0, 0, 0, 1,	$3 - cos($2) * $3 + sin($2) * $4, $4 - sin($2) * $3 - cos($2) * $4, 0)'
+	AS 'SELECT @extschema at .ST_Affine($1,  cos($2), -sin($2), 0,  sin($2),  cos($2), 0, 0, 0, 1,	$3 - cos($2) * $3 + sin($2) * $4, $4 - sin($2) * $3 - cos($2) * $4, 0)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 2.0.0
 CREATE OR REPLACE FUNCTION ST_Rotate(geometry,float8,geometry)
 	RETURNS geometry
-	AS 'SELECT ST_Affine($1,  cos($2), -sin($2), 0,  sin($2),  cos($2), 0, 0, 0, 1, ST_X($3) - cos($2) * ST_X($3) + sin($2) * ST_Y($3), ST_Y($3) - sin($2) * ST_X($3) - cos($2) * ST_Y($3), 0)'
+	AS 'SELECT @extschema at .ST_Affine($1,  cos($2), -sin($2), 0,  sin($2),  cos($2), 0, 0, 0, 1, @extschema at .ST_X($3) - cos($2) * @extschema at .ST_X($3) + sin($2) * @extschema at .ST_Y($3), @extschema at .ST_Y($3) - sin($2) * @extschema at .ST_X($3) - cos($2) * @extschema at .ST_Y($3), 0)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_RotateZ(geometry,float8)
 	RETURNS geometry
-	AS 'SELECT ST_Rotate($1, $2)'
+	AS 'SELECT @extschema at .ST_Rotate($1, $2)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_RotateX(geometry,float8)
 	RETURNS geometry
-	AS 'SELECT ST_Affine($1, 1, 0, 0, 0, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0)'
+	AS 'SELECT @extschema at .ST_Affine($1, 1, 0, 0, 0, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_RotateY(geometry,float8)
 	RETURNS geometry
-	AS 'SELECT ST_Affine($1,  cos($2), 0, sin($2),  0, 1, 0,  -sin($2), 0, cos($2), 0,  0, 0)'
+	AS 'SELECT @extschema at .ST_Affine($1,  cos($2), 0, sin($2),  0, 1, 0,  -sin($2), 0, cos($2), 0,  0, 0)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_Translate(geometry,float8,float8,float8)
 	RETURNS geometry
-	AS 'SELECT ST_Affine($1, 1, 0, 0, 0, 1, 0, 0, 0, 1, $2, $3, $4)'
+	AS 'SELECT @extschema at .ST_Affine($1, 1, 0, 0, 0, 1, 0, 0, 0, 1, $2, $3, $4)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_Translate(geometry,float8,float8)
 	RETURNS geometry
-	AS 'SELECT ST_Translate($1, $2, $3, 0)'
+	AS 'SELECT @extschema at .ST_Translate($1, $2, $3, 0)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 2.2.0
@@ -1801,19 +1801,19 @@
 CREATE OR REPLACE FUNCTION ST_Scale(geometry,float8,float8,float8)
 	RETURNS geometry
 	--AS 'SELECT ST_Affine($1,  $2, 0, 0,  0, $3, 0,  0, 0, $4,  0, 0, 0)'
-	AS 'SELECT ST_Scale($1, ST_MakePoint($2, $3, $4))'
+	AS 'SELECT @extschema at .ST_Scale($1, @extschema at .ST_MakePoint($2, $3, $4))'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_Scale(geometry,float8,float8)
 	RETURNS geometry
-	AS 'SELECT ST_Scale($1, $2, $3, 1)'
+	AS 'SELECT @extschema at .ST_Scale($1, $2, $3, 1)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_Transscale(geometry,float8,float8,float8,float8)
 	RETURNS geometry
-	AS 'SELECT ST_Affine($1,  $4, 0, 0,  0, $5, 0,
+	AS 'SELECT @extschema at .ST_Affine($1,  $4, 0, 0,  0, $5, 0,
 		0, 0, 1,  $2 * $4, $3 * $5, 0)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -1856,16 +1856,16 @@
 
 BEGIN
 
-  -- RAISE DEBUG '%,%', cur_path, ST_GeometryType(the_geom);
+  -- RAISE DEBUG '%,%', cur_path, @extschema at .ST_GeometryType(the_geom);
 
   -- Special case collections : iterate and return the DumpPoints of the geometries
 
-  IF (ST_IsCollection(the_geom)) THEN
+  IF (@extschema at .ST_IsCollection(the_geom)) THEN
 
     i = 1;
-    FOR tmp2 IN SELECT (ST_Dump(the_geom)).* LOOP
+    FOR tmp2 IN SELECT (@extschema at .ST_Dump(the_geom)).* LOOP
 
-      FOR tmp IN SELECT * FROM _ST_DumpPoints(tmp2.geom, cur_path || tmp2.path) LOOP
+      FOR tmp IN SELECT * FROM @extschema at ._ST_DumpPoints(tmp2.geom, cur_path || tmp2.path) LOOP
 	    RETURN NEXT tmp;
       END LOOP;
       i = i + 1;
@@ -1877,15 +1877,15 @@
 
 
   -- Special case (POLYGON) : return the points of the rings of a polygon
-  IF (ST_GeometryType(the_geom) = 'ST_Polygon') THEN
+  IF (@extschema at .ST_GeometryType(the_geom) = 'ST_Polygon') THEN
 
-    FOR tmp IN SELECT * FROM _ST_DumpPoints(ST_ExteriorRing(the_geom), cur_path || ARRAY[1]) LOOP
+    FOR tmp IN SELECT * FROM @extschema at ._ST_DumpPoints(@extschema at .ST_ExteriorRing(the_geom), cur_path || ARRAY[1]) LOOP
       RETURN NEXT tmp;
     END LOOP;
 
-    j := ST_NumInteriorRings(the_geom);
+    j := @extschema at .ST_NumInteriorRings(the_geom);
     FOR i IN 1..j LOOP
-        FOR tmp IN SELECT * FROM _ST_DumpPoints(ST_InteriorRingN(the_geom, i), cur_path || ARRAY[i+1]) LOOP
+        FOR tmp IN SELECT * FROM @extschema at ._ST_DumpPoints(@extschema at .ST_InteriorRingN(the_geom, i), cur_path || ARRAY[i+1]) LOOP
           RETURN NEXT tmp;
         END LOOP;
     END LOOP;
@@ -1894,9 +1894,9 @@
   END IF;
 
   -- Special case (TRIANGLE) : return the points of the external rings of a TRIANGLE
-  IF (ST_GeometryType(the_geom) = 'ST_Triangle') THEN
+  IF (@extschema at .ST_GeometryType(the_geom) = 'ST_Triangle') THEN
 
-    FOR tmp IN SELECT * FROM _ST_DumpPoints(ST_ExteriorRing(the_geom), cur_path || ARRAY[1]) LOOP
+    FOR tmp IN SELECT * FROM @extschema at ._ST_DumpPoints(@extschema at .ST_ExteriorRing(the_geom), cur_path || ARRAY[1]) LOOP
       RETURN NEXT tmp;
     END LOOP;
 
@@ -1905,7 +1905,7 @@
 
 
   -- Special case (POINT) : return the point
-  IF (ST_GeometryType(the_geom) = 'ST_Point') THEN
+  IF (@extschema at .ST_GeometryType(the_geom) = 'ST_Point') THEN
 
     tmp.path = cur_path || ARRAY[1];
     tmp.geom = the_geom;
@@ -1918,16 +1918,16 @@
 
   -- Use ST_NumPoints rather than ST_NPoints to have a NULL value if the_geom isn't
   -- a LINESTRING, CIRCULARSTRING.
-  SELECT ST_NumPoints(the_geom) INTO nb_points;
+  SELECT @extschema at .ST_NumPoints(the_geom) INTO nb_points;
 
   -- This should never happen
   IF (nb_points IS NULL) THEN
-    RAISE EXCEPTION 'Unexpected error while dumping geometry %', ST_AsText(the_geom);
+    RAISE EXCEPTION 'Unexpected error while dumping geometry %', @extschema at .ST_AsText(the_geom);
   END IF;
 
   FOR i IN 1..nb_points LOOP
     tmp.path = cur_path || ARRAY[i];
-    tmp.geom := ST_PointN(the_geom, i);
+    tmp.geom := @extschema at .ST_PointN(the_geom, i);
     RETURN NEXT tmp;
   END LOOP;
 
@@ -2112,7 +2112,7 @@
         IF upper(gc_old.type) = 'GEOMETRY' THEN
         -- This is an unconstrained geometry we need to do something
         -- We need to figure out what to set the type by inspecting the data
-            EXECUTE 'SELECT st_srid(' || quote_ident(gcs.attname) || ') As srid, GeometryType(' || quote_ident(gcs.attname) || ') As type, ST_NDims(' || quote_ident(gcs.attname) || ') As dims ' ||
+            EXECUTE 'SELECT @extschema at .ST_srid(' || quote_ident(gcs.attname) || ') As srid, GeometryType(' || quote_ident(gcs.attname) || ') As type, @extschema at .ST_NDims(' || quote_ident(gcs.attname) || ') As dims ' ||
                      ' FROM ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) ||
                      ' WHERE ' || quote_ident(gcs.attname) || ' IS NOT NULL LIMIT 1;'
                 INTO gc;
@@ -2140,7 +2140,7 @@
                     BEGIN
                         EXECUTE 'ALTER TABLE ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) ||
                                  ' ADD CONSTRAINT ' || quote_ident('enforce_srid_' || gcs.attname) ||
-                                 ' CHECK (st_srid(' || quote_ident(gcs.attname) || ') = ' || gsrid || ')';
+                                 ' CHECK (ST_srid(' || quote_ident(gcs.attname) || ') = ' || gsrid || ')';
                         constraint_successful := true;
                     EXCEPTION
                         WHEN check_violation THEN
@@ -2265,7 +2265,7 @@
 			RETURN 'fail';
 		END IF;
 	ELSE
-		new_srid := ST_SRID('POINT EMPTY'::geometry);
+		new_srid := @extschema at .ST_SRID('POINT EMPTY'::@extschema at .geometry);
 		IF ( new_srid_in != new_srid ) THEN
 			RAISE NOTICE 'SRID value % converted to the officially unknown SRID value %', new_srid_in, new_srid;
 		END IF;
@@ -2625,7 +2625,7 @@
 			RETURN false;
 		END IF;
 	ELSE
-		unknown_srid := ST_SRID('POINT EMPTY'::geometry);
+		unknown_srid := @extschema at .ST_SRID('POINT EMPTY'::@extschema at .geometry);
 		IF ( new_srid != unknown_srid ) THEN
 			new_srid := unknown_srid;
 			RAISE NOTICE 'SRID value % converted to the officially unknown SRID value %', new_srid_in, new_srid;
@@ -2646,7 +2646,7 @@
         EXECUTE 'UPDATE ' || quote_ident(real_schema) ||
             '.' || quote_ident(table_name) ||
             ' SET ' || quote_ident(column_name) ||
-            ' = ST_SetSRID(' || quote_ident(column_name) ||
+            ' = @extschema at .ST_SetSRID(' || quote_ident(column_name) ||
             ', ' || new_srid::text || ')';
 
         -- Reset enforce_srid constraint
@@ -2660,7 +2660,7 @@
         -- We are using postgis_type_name to lookup the new name
         -- (in case Paul changes his mind and flips geometry_columns to return old upper case name)
         EXECUTE 'ALTER TABLE ' || quote_ident(real_schema) || '.' || quote_ident(table_name) ||
-        ' ALTER COLUMN ' || quote_ident(column_name) || ' TYPE  geometry(' || postgis_type_name(myrec.type, myrec.coord_dimension, true) || ', ' || new_srid::text || ') USING ST_SetSRID(' || quote_ident(column_name) || ',' || new_srid::text || ');' ;
+        ' ALTER COLUMN ' || quote_ident(column_name) || ' TYPE  geometry(' || postgis_type_name(myrec.type, myrec.coord_dimension, true) || ', ' || new_srid::text || ') USING @extschema at .ST_SetSRID(' || quote_ident(column_name) || ',' || new_srid::text || ');' ;
     END IF;
 
 	RETURN real_schema || '.' || table_name || '.' || column_name ||' SRID changed to ' || new_srid::text;
@@ -2770,7 +2770,7 @@
 CREATE OR REPLACE FUNCTION ST_Transform(geom geometry, to_proj text)
   RETURNS geometry AS
 'SELECT postgis_transform_geometry($1, proj4text, $2, 0)
-FROM spatial_ref_sys WHERE srid=ST_SRID($1);'
+FROM spatial_ref_sys WHERE srid=@extschema at .ST_SRID($1);'
   LANGUAGE sql IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 2.3.0
@@ -3130,7 +3130,7 @@
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_SnapToGrid(geometry, float8, float8)
 	RETURNS geometry
-	AS 'SELECT ST_SnapToGrid($1, 0, 0, $2, $3)'
+	AS 'SELECT @extschema at .ST_SnapToGrid($1, 0, 0, $2, $3)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL
 	COST 25;
 
@@ -3138,7 +3138,7 @@
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_SnapToGrid(geometry, float8)
 	RETURNS geometry
-	AS 'SELECT ST_SnapToGrid($1, 0, 0, $2, $2)'
+	AS 'SELECT @extschema at .ST_SnapToGrid($1, 0, 0, $2, $2)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- ST_SnapToGrid(input, point_offsets, xsize, ysize, zsize, msize)
@@ -3170,8 +3170,8 @@
 -- Deprecation in 2.1.0
 CREATE OR REPLACE FUNCTION ST_line_interpolate_point(geometry, float8)
 	RETURNS geometry AS
-  $$ SELECT _postgis_deprecate('ST_Line_Interpolate_Point', 'ST_LineInterpolatePoint', '2.1.0');
-    SELECT ST_LineInterpolatePoint($1, $2);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Line_Interpolate_Point', 'ST_LineInterpolatePoint', '2.1.0');
+    SELECT @extschema at .ST_LineInterpolatePoint($1, $2);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -3185,8 +3185,8 @@
 -- Deprecation in 2.1.0
 CREATE OR REPLACE FUNCTION ST_line_substring(geometry, float8, float8)
 	RETURNS geometry AS
-  $$ SELECT _postgis_deprecate('ST_Line_Substring', 'ST_LineSubstring', '2.1.0');
-     SELECT ST_LineSubstring($1, $2, $3);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Line_Substring', 'ST_LineSubstring', '2.1.0');
+     SELECT @extschema at .ST_LineSubstring($1, $2, $3);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -3200,8 +3200,8 @@
 -- Deprecation in 2.1.0
 CREATE OR REPLACE FUNCTION ST_line_locate_point(geom1 geometry, geom2 geometry)
 	RETURNS float8 AS
-  $$ SELECT _postgis_deprecate('ST_Line_Locate_Point', 'ST_LineLocatePoint', '2.1.0');
-     SELECT ST_LineLocatePoint($1, $2);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Line_Locate_Point', 'ST_LineLocatePoint', '2.1.0');
+     SELECT @extschema at .ST_LineLocatePoint($1, $2);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -3218,7 +3218,7 @@
 -- TODO: switch to use of _postgis_deprecate() in 2.3.0 (or drop)
 CREATE OR REPLACE FUNCTION ST_locate_along_measure(geometry, float8)
 	RETURNS geometry
-	AS $$ SELECT ST_locate_between_measures($1, $2, $2) $$
+	AS $$ SELECT @extschema at .ST_locate_between_measures($1, $2, $2) $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.5.0
@@ -3283,7 +3283,7 @@
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_Buffer(geometry,float8,integer)
 	RETURNS geometry
-	AS $$ SELECT _ST_Buffer($1, $2,
+	AS $$ SELECT @extschema at ._ST_Buffer($1, $2,
 		CAST('quad_segs='||CAST($3 AS text) as cstring))
 	   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -3291,7 +3291,7 @@
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_Buffer(geometry,float8,text)
 	RETURNS geometry
-	AS $$ SELECT _ST_Buffer($1, $2,
+	AS $$ SELECT @extschema at ._ST_Buffer($1, $2,
 		CAST( regexp_replace($3, '^[0123456789]+$',
 			'quad_segs='||$3) AS cstring)
 		)
@@ -3306,7 +3306,7 @@
 -- Availability: 1.4.0
 CREATE OR REPLACE FUNCTION ST_MinimumBoundingCircle(inputgeom geometry, segs_per_quarter integer DEFAULT 48)
 	RETURNS geometry
-    AS $$ SELECT ST_Buffer(center, radius, segs_per_quarter) FROM ST_MinimumBoundingRadius($1) sq $$
+    AS $$ SELECT @extschema at .ST_Buffer(center, radius, segs_per_quarter) FROM @extschema at .ST_MinimumBoundingRadius($1) sq $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 2.0.0 - requires GEOS-3.2 or higher
@@ -3341,7 +3341,7 @@
 -- Availability: 1.4.0
 CREATE OR REPLACE FUNCTION ST_LineCrossingDirection(geom1 geometry, geom2 geometry)
 	RETURNS integer AS
-	$$ SELECT CASE WHEN NOT $1 && $2 THEN 0 ELSE _ST_LineCrossingDirection($1,$2) END $$
+	$$ SELECT CASE WHEN NOT $1 OPERATOR(@extschema at .&&) $2 THEN 0 ELSE @extschema at ._ST_LineCrossingDirection($1,$2) END $$
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Requires GEOS >= 3.0.0
@@ -3389,7 +3389,7 @@
 	RETURNS text
 	AS $$
 SELECT CASE WHEN valid THEN 'Valid Geometry' ELSE reason END FROM (
-	SELECT (ST_isValidDetail($1, $2)).*
+	SELECT (@extschema at .ST_isValidDetail($1, $2)).*
 ) foo
 	$$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL
@@ -3399,7 +3399,7 @@
 -- Availability: 2.0.0
 CREATE OR REPLACE FUNCTION ST_IsValid(geometry, int4)
 	RETURNS boolean
-	AS 'SELECT (ST_isValidDetail($1, $2)).valid'
+	AS 'SELECT (@extschema at .ST_isValidDetail($1, $2)).valid'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 
@@ -3706,8 +3706,8 @@
 -- Deprecation in 2.2.0
 CREATE OR REPLACE FUNCTION ST_Combine_BBox(box3d,geometry)
 	RETURNS box3d AS
-  $$ SELECT _postgis_deprecate('ST_Combine_BBox', 'ST_CombineBbox', '2.2.0');
-    SELECT ST_CombineBbox($1,$2);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Combine_BBox', 'ST_CombineBbox', '2.2.0');
+    SELECT @extschema at .ST_CombineBbox($1,$2);
   $$
 	LANGUAGE 'sql' IMMUTABLE;
 
@@ -3721,8 +3721,8 @@
 -- Deprecation in 2.2.0
 CREATE OR REPLACE FUNCTION ST_Combine_BBox(box2d,geometry)
 	RETURNS box2d AS
-  $$ SELECT _postgis_deprecate('ST_Combine_BBox', 'ST_CombineBbox', '2.2.0');
-    SELECT ST_CombineBbox($1,$2);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Combine_BBox', 'ST_CombineBbox', '2.2.0');
+    SELECT @extschema at .ST_CombineBbox($1,$2);
   $$
 	LANGUAGE 'sql' IMMUTABLE;
 
@@ -3969,7 +3969,7 @@
 -- Inlines index magic
 CREATE OR REPLACE FUNCTION ST_Touches(geom1 geometry, geom2 geometry)
 	RETURNS boolean
-	AS 'SELECT $1 && $2 AND _ST_Touches($1,$2)'
+	AS 'SELECT $1 OPERATOR(@extschema at .&&) $2 AND @extschema at ._ST_Touches($1,$2)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Availability: 1.3.4
@@ -3982,7 +3982,7 @@
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_DWithin(geom1 geometry, geom2 geometry, float8)
 	RETURNS boolean
-	AS 'SELECT $1 && ST_Expand($2,$3) AND $2 && ST_Expand($1,$3) AND _ST_DWithin($1, $2, $3)'
+	AS 'SELECT $1 OPERATOR(@extschema at .&&) @extschema at .ST_Expand($2,$3) AND $2 OPERATOR(@extschema at .&&) @extschema at .ST_Expand($1,$3) AND @extschema at ._ST_DWithin($1, $2, $3)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- PostGIS equivalent function: intersects(geom1 geometry, geom2 geometry)
@@ -3996,7 +3996,7 @@
 -- Inlines index magic
 CREATE OR REPLACE FUNCTION ST_Intersects(geom1 geometry, geom2 geometry)
 	RETURNS boolean
-	AS 'SELECT $1 && $2 AND _ST_Intersects($1,$2)'
+	AS 'SELECT $1 OPERATOR(@extschema at .&&) $2 AND @extschema at ._ST_Intersects($1,$2)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- PostGIS equivalent function: crosses(geom1 geometry, geom2 geometry)
@@ -4010,7 +4010,7 @@
 -- Inlines index magic
 CREATE OR REPLACE FUNCTION ST_Crosses(geom1 geometry, geom2 geometry)
 	RETURNS boolean
-	AS 'SELECT $1 && $2 AND _ST_Crosses($1,$2)'
+	AS 'SELECT $1 OPERATOR(@extschema at .&&) $2 AND @extschema at ._ST_Crosses($1,$2)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- PostGIS equivalent function: contains(geom1 geometry, geom2 geometry)
@@ -4024,7 +4024,7 @@
 -- Inlines index magic
 CREATE OR REPLACE FUNCTION ST_Contains(geom1 geometry, geom2 geometry)
 	RETURNS boolean
-	AS 'SELECT $1 ~ $2 AND _ST_Contains($1,$2)'
+	AS 'SELECT $1 OPERATOR(@extschema at .~) $2 AND @extschema at ._ST_Contains($1,$2)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Availability: 1.2.2
@@ -4037,7 +4037,7 @@
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_CoveredBy(geom1 geometry, geom2 geometry)
 	RETURNS boolean
-	AS 'SELECT $1 @ $2 AND _ST_CoveredBy($1,$2)'
+	AS 'SELECT $1 @ $2 AND @extschema at ._ST_CoveredBy($1,$2)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Availability: 1.2.2
@@ -4051,7 +4051,7 @@
 -- Inlines index magic
 CREATE OR REPLACE FUNCTION ST_Covers(geom1 geometry, geom2 geometry)
 	RETURNS boolean
-	AS 'SELECT $1 ~ $2 AND _ST_Covers($1,$2)'
+	AS 'SELECT $1 OPERATOR(@extschema at .~) $2 AND @extschema at ._ST_Covers($1,$2)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Availability: 1.4.0
@@ -4065,7 +4065,7 @@
 -- Inlines index magic
 CREATE OR REPLACE FUNCTION ST_ContainsProperly(geom1 geometry, geom2 geometry)
 	RETURNS boolean
-	AS 'SELECT $1 ~ $2 AND _ST_ContainsProperly($1,$2)'
+	AS 'SELECT $1 OPERATOR(@extschema at .~) $2 AND @extschema at ._ST_ContainsProperly($1,$2)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- PostGIS equivalent function: overlaps(geom1 geometry, geom2 geometry)
@@ -4078,21 +4078,21 @@
 -- PostGIS equivalent function: within(geom1 geometry, geom2 geometry)
 CREATE OR REPLACE FUNCTION _ST_Within(geom1 geometry, geom2 geometry)
 	RETURNS boolean
-	AS 'SELECT _ST_Contains($2,$1)'
+	AS 'SELECT @extschema at ._ST_Contains($2,$1)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Availability: 1.2.2
 -- Inlines index magic
 CREATE OR REPLACE FUNCTION ST_Within(geom1 geometry, geom2 geometry)
 	RETURNS boolean
-	AS 'SELECT $2 ~ $1 AND _ST_Contains($2,$1)'
+	AS 'SELECT $2 OPERATOR(@extschema at .~) $1 AND @extschema at ._ST_Contains($2,$1)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Availability: 1.2.2
 -- Inlines index magic
 CREATE OR REPLACE FUNCTION ST_Overlaps(geom1 geometry, geom2 geometry)
 	RETURNS boolean
-	AS 'SELECT $1 && $2 AND _ST_Overlaps($1,$2)'
+	AS 'SELECT $1 OPERATOR(@extschema at .&&) $2 AND @extschema at ._ST_Overlaps($1,$2)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- PostGIS equivalent function: IsValid(geometry)
@@ -4166,7 +4166,7 @@
 -- Availability: 1.2.1
 CREATE OR REPLACE FUNCTION ST_Equals(geom1 geometry, geom2 geometry)
 	RETURNS boolean
-	AS 'SELECT $1 ~= $2 AND _ST_Equals($1,$2)'
+	AS 'SELECT $1 OPERATOR(@extschema at .~=) $2 AND @extschema at ._ST_Equals($1,$2)'
 	LANGUAGE 'sql' IMMUTABLE _PARALLEL;
 
 -- Deprecation in 1.2.3
@@ -4193,13 +4193,13 @@
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_GeomFromGML(text)
         RETURNS geometry
-        AS 'SELECT _ST_GeomFromGML($1, 0)'
+        AS 'SELECT @extschema at ._ST_GeomFromGML($1, 0)'
         LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_GMLToSQL(text)
         RETURNS geometry
-        AS 'SELECT _ST_GeomFromGML($1, 0)'
+        AS 'SELECT @extschema at ._ST_GeomFromGML($1, 0)'
         LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 2.0.0
@@ -4284,7 +4284,7 @@
 -- Changed: 2.0.0 to have default args
 CREATE OR REPLACE FUNCTION ST_AsGML(geom geometry, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0)
 	RETURNS TEXT
-	AS $$ SELECT _ST_AsGML(2, $1, $2, $3, null, null); $$
+	AS $$ SELECT @extschema at ._ST_AsGML(2, $1, $2, $3, null, null); $$
 	LANGUAGE 'sql' IMMUTABLE STRICT  _PARALLEL;
 
 -- ST_AsGML(version, geom, precision, option)
@@ -4296,7 +4296,7 @@
 -- Availability: 2.1.0
 CREATE OR REPLACE FUNCTION ST_AsGML(version int4, geom geometry, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0, nprefix text DEFAULT null, id text DEFAULT null)
 	RETURNS TEXT
-	AS $$ SELECT _ST_AsGML($1, $2, $3, $4, $5, $6); $$
+	AS $$ SELECT @extschema at ._ST_AsGML($1, $2, $3, $4, $5, $6); $$
 	LANGUAGE 'sql' IMMUTABLE  _PARALLEL;
 
 -----------------------------------------------------------------------
@@ -4313,7 +4313,7 @@
 -- Changed: 2.0.0 to use default args and allow named args
 CREATE OR REPLACE FUNCTION ST_AsKML(geom geometry, maxdecimaldigits int4 DEFAULT 15)
 	RETURNS TEXT
-	AS $$ SELECT _ST_AsKML(2, ST_Transform($1,4326), $2, null); $$
+	AS $$ SELECT @extschema at ._ST_AsKML(2, ST_Transform($1,4326), $2, null); $$
 	LANGUAGE 'sql' IMMUTABLE STRICT  _PARALLEL;
 
 -- ST_AsKML(version, geom, precision, text)
@@ -4321,7 +4321,7 @@
 -- Changed: 2.0.0 allows default args and got rid of other permutations
 CREATE OR REPLACE FUNCTION ST_AsKML(version int4, geom geometry, maxdecimaldigits int4 DEFAULT 15, nprefix text DEFAULT null)
 	RETURNS TEXT
-	AS $$ SELECT _ST_AsKML($1, ST_Transform($2,4326), $3, $4); $$
+	AS $$ SELECT @extschema at ._ST_AsKML($1, @extschema at .ST_Transform($2,4326), $3, $4); $$
 	LANGUAGE 'sql' IMMUTABLE  _PARALLEL;
 
 
@@ -4341,14 +4341,14 @@
 -- _ST_AsGeoJson(version, geom, precision, options)
 CREATE OR REPLACE FUNCTION _ST_AsGeoJson(int4, geometry, int4, int4)
 	RETURNS TEXT
-	AS $$ SELECT ST_AsGeoJson($2::geometry, $3::int4, $4::int4); $$
+	AS $$ SELECT @extschema at .ST_AsGeoJson($2::@extschema at .geometry, $3::int4, $4::int4); $$
 	LANGUAGE 'sql' IMMUTABLE STRICT  _PARALLEL;
 
 -- ST_AsGeoJson(version, geom, precision,options)
 -- Changed 2.0.0 to use default args and named args
 CREATE OR REPLACE FUNCTION ST_AsGeoJson(gj_version int4, geom geometry, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0)
 	RETURNS TEXT
-	AS $$ SELECT ST_AsGeoJson($2::geometry, $3::int4, $4::int4); $$
+	AS $$ SELECT @extschema at .ST_AsGeoJson($2::@extschema at .geometry, $3::int4, $4::int4); $$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 ------------------------------------------------------------------------
@@ -4381,7 +4381,7 @@
 -- ST_GeomFromGeoHash(geohash text, precision int4)
 CREATE OR REPLACE FUNCTION ST_GeomFromGeoHash(text, int4 DEFAULT NULL)
 	RETURNS geometry
-	AS $$ SELECT CAST(ST_Box2dFromGeoHash($1, $2) AS geometry); $$
+	AS $$ SELECT CAST(@extschema at .ST_Box2dFromGeoHash($1, $2) AS geometry); $$
 	LANGUAGE 'sql' IMMUTABLE  _PARALLEL;
 
 ------------------------------------------------------------------------
@@ -4460,8 +4460,8 @@
 CREATE OR REPLACE FUNCTION ST_NumPatches(geometry)
 	RETURNS int4
 	AS '
-	SELECT CASE WHEN ST_GeometryType($1) = ''ST_PolyhedralSurface''
-	THEN ST_NumGeometries($1)
+	SELECT CASE WHEN @extschema at .ST_GeometryType($1) = ''ST_PolyhedralSurface''
+	THEN @extschema at .ST_NumGeometries($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4470,8 +4470,8 @@
 CREATE OR REPLACE FUNCTION ST_PatchN(geometry, integer)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN ST_GeometryType($1) = ''ST_PolyhedralSurface''
-	THEN ST_GeometryN($1, $2)
+	SELECT CASE WHEN @extschema at .ST_GeometryType($1) = ''ST_PolyhedralSurface''
+	THEN @extschema at .ST_GeometryN($1, $2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4558,8 +4558,8 @@
 CREATE OR REPLACE FUNCTION ST_PointFromText(text)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''POINT''
-	THEN ST_GeomFromText($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromText($1)) = ''POINT''
+	THEN @extschema at .ST_GeomFromText($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4570,8 +4570,8 @@
 CREATE OR REPLACE FUNCTION ST_PointFromText(text, int4)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''POINT''
-	THEN ST_GeomFromText($1, $2)
+	SELECT CASE WHEN geometrytype(@extschema at .ST_GeomFromText($1, $2)) = ''POINT''
+	THEN @extschema at .ST_GeomFromText($1, $2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4580,8 +4580,8 @@
 CREATE OR REPLACE FUNCTION ST_LineFromText(text)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''LINESTRING''
-	THEN ST_GeomFromText($1)
+	SELECT CASE WHEN geometrytype(@extschema at .ST_GeomFromText($1)) = ''LINESTRING''
+	THEN @extschema at .ST_GeomFromText($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4590,8 +4590,8 @@
 CREATE OR REPLACE FUNCTION ST_LineFromText(text, int4)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''LINESTRING''
-	THEN ST_GeomFromText($1,$2)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromText($1, $2)) = ''LINESTRING''
+	THEN @extschema at .ST_GeomFromText($1,$2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4600,8 +4600,8 @@
 CREATE OR REPLACE FUNCTION ST_PolyFromText(text)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''POLYGON''
-	THEN ST_GeomFromText($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromText($1)) = ''POLYGON''
+	THEN @extschema at .ST_GeomFromText($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4610,8 +4610,8 @@
 CREATE OR REPLACE FUNCTION ST_PolyFromText(text, int4)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''POLYGON''
-	THEN ST_GeomFromText($1, $2)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromText($1, $2)) = ''POLYGON''
+	THEN @extschema at .ST_GeomFromText($1, $2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4619,13 +4619,13 @@
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_PolygonFromText(text, int4)
 	RETURNS geometry
-	AS 'SELECT ST_PolyFromText($1, $2)'
+	AS 'SELECT @extschema at .ST_PolyFromText($1, $2)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_PolygonFromText(text)
 	RETURNS geometry
-	AS 'SELECT ST_PolyFromText($1)'
+	AS 'SELECT @extschema at .ST_PolyFromText($1)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- PostGIS equivalent function: MLineFromText(text, int4)
@@ -4633,8 +4633,8 @@
 	RETURNS geometry
 	AS '
 	SELECT CASE
-	WHEN geometrytype(ST_GeomFromText($1, $2)) = ''MULTILINESTRING''
-	THEN ST_GeomFromText($1,$2)
+	WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromText($1, $2)) = ''MULTILINESTRING''
+	THEN @extschema at .ST_GeomFromText($1,$2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4643,8 +4643,8 @@
 CREATE OR REPLACE FUNCTION ST_MLineFromText(text)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''MULTILINESTRING''
-	THEN ST_GeomFromText($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromText($1)) = ''MULTILINESTRING''
+	THEN @extschema at .ST_GeomFromText($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4653,20 +4653,20 @@
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_MultiLineStringFromText(text)
 	RETURNS geometry
-	AS 'SELECT ST_MLineFromText($1)'
+	AS 'SELECT @extschema at .ST_MLineFromText($1)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_MultiLineStringFromText(text, int4)
 	RETURNS geometry
-	AS 'SELECT ST_MLineFromText($1, $2)'
+	AS 'SELECT @extschema at .ST_MLineFromText($1, $2)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- PostGIS equivalent function: MPointFromText(text, int4)
 CREATE OR REPLACE FUNCTION ST_MPointFromText(text, int4)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''MULTIPOINT''
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromText($1, $2)) = ''MULTIPOINT''
 	THEN ST_GeomFromText($1, $2)
 	ELSE NULL END
 	'
@@ -4676,8 +4676,8 @@
 CREATE OR REPLACE FUNCTION ST_MPointFromText(text)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''MULTIPOINT''
-	THEN ST_GeomFromText($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromText($1)) = ''MULTIPOINT''
+	THEN @extschema at .ST_GeomFromText($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4685,15 +4685,15 @@
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_MultiPointFromText(text)
 	RETURNS geometry
-	AS 'SELECT ST_MPointFromText($1)'
+	AS 'SELECT @extschema at .ST_MPointFromText($1)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- PostGIS equivalent function: MPolyFromText(text, int4)
 CREATE OR REPLACE FUNCTION ST_MPolyFromText(text, int4)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''MULTIPOLYGON''
-	THEN ST_GeomFromText($1,$2)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromText($1, $2)) = ''MULTIPOLYGON''
+	THEN @extschema at .ST_GeomFromText($1,$2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4702,8 +4702,8 @@
 CREATE OR REPLACE FUNCTION ST_MPolyFromText(text)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''MULTIPOLYGON''
-	THEN ST_GeomFromText($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromText($1)) = ''MULTIPOLYGON''
+	THEN @extschema at .ST_GeomFromText($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4711,13 +4711,13 @@
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_MultiPolygonFromText(text, int4)
 	RETURNS geometry
-	AS 'SELECT ST_MPolyFromText($1, $2)'
+	AS 'SELECT @extschema at .ST_MPolyFromText($1, $2)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.2.2
 CREATE OR REPLACE FUNCTION ST_MultiPolygonFromText(text)
 	RETURNS geometry
-	AS 'SELECT ST_MPolyFromText($1)'
+	AS 'SELECT @extschema at .ST_MPolyFromText($1)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- Availability: 1.2.2
@@ -4725,8 +4725,8 @@
 	RETURNS geometry
 	AS '
 	SELECT CASE
-	WHEN geometrytype(ST_GeomFromText($1, $2)) = ''GEOMETRYCOLLECTION''
-	THEN ST_GeomFromText($1,$2)
+	WHEN geometrytype(@extschema at .ST_GeomFromText($1, $2)) = ''GEOMETRYCOLLECTION''
+	THEN @extschema at .ST_GeomFromText($1,$2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4736,8 +4736,8 @@
 	RETURNS geometry
 	AS '
 	SELECT CASE
-	WHEN geometrytype(ST_GeomFromText($1)) = ''GEOMETRYCOLLECTION''
-	THEN ST_GeomFromText($1)
+	WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromText($1)) = ''GEOMETRYCOLLECTION''
+	THEN @extschema at .ST_GeomFromText($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4751,15 +4751,15 @@
 -- PostGIS equivalent function: GeomFromWKB(bytea, int)
 CREATE OR REPLACE FUNCTION ST_GeomFromWKB(bytea, int)
 	RETURNS geometry
-	AS 'SELECT ST_SetSRID(ST_GeomFromWKB($1), $2)'
+	AS 'SELECT @extschema at .ST_SetSRID(@extschema at .ST_GeomFromWKB($1), $2)'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 -- PostGIS equivalent function: PointFromWKB(bytea, int)
 CREATE OR REPLACE FUNCTION ST_PointFromWKB(bytea, int)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''POINT''
-	THEN ST_GeomFromWKB($1, $2)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1, $2)) = ''POINT''
+	THEN @extschema at .ST_GeomFromWKB($1, $2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4768,8 +4768,8 @@
 CREATE OR REPLACE FUNCTION ST_PointFromWKB(bytea)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''POINT''
-	THEN ST_GeomFromWKB($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1)) = ''POINT''
+	THEN @extschema at .ST_GeomFromWKB($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4778,8 +4778,8 @@
 CREATE OR REPLACE FUNCTION ST_LineFromWKB(bytea, int)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''LINESTRING''
-	THEN ST_GeomFromWKB($1, $2)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1, $2)) = ''LINESTRING''
+	THEN @extschema at .ST_GeomFromWKB($1, $2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4788,8 +4788,8 @@
 CREATE OR REPLACE FUNCTION ST_LineFromWKB(bytea)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''LINESTRING''
-	THEN ST_GeomFromWKB($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1)) = ''LINESTRING''
+	THEN @extschema at .ST_GeomFromWKB($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4798,8 +4798,8 @@
 CREATE OR REPLACE FUNCTION ST_LinestringFromWKB(bytea, int)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''LINESTRING''
-	THEN ST_GeomFromWKB($1, $2)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1, $2)) = ''LINESTRING''
+	THEN @extschema at .ST_GeomFromWKB($1, $2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4808,8 +4808,8 @@
 CREATE OR REPLACE FUNCTION ST_LinestringFromWKB(bytea)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''LINESTRING''
-	THEN ST_GeomFromWKB($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1)) = ''LINESTRING''
+	THEN @extschema at .ST_GeomFromWKB($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4818,8 +4818,8 @@
 CREATE OR REPLACE FUNCTION ST_PolyFromWKB(bytea, int)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''POLYGON''
-	THEN ST_GeomFromWKB($1, $2)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1, $2)) = ''POLYGON''
+	THEN @extschema at .ST_GeomFromWKB($1, $2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4828,8 +4828,8 @@
 CREATE OR REPLACE FUNCTION ST_PolyFromWKB(bytea)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''POLYGON''
-	THEN ST_GeomFromWKB($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1)) = ''POLYGON''
+	THEN @extschema at .ST_GeomFromWKB($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4838,8 +4838,8 @@
 CREATE OR REPLACE FUNCTION ST_PolygonFromWKB(bytea, int)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1,$2)) = ''POLYGON''
-	THEN ST_GeomFromWKB($1, $2)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1,$2)) = ''POLYGON''
+	THEN @extschema at .ST_GeomFromWKB($1, $2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4848,8 +4848,8 @@
 CREATE OR REPLACE FUNCTION ST_PolygonFromWKB(bytea)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''POLYGON''
-	THEN ST_GeomFromWKB($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1)) = ''POLYGON''
+	THEN @extschema at .ST_GeomFromWKB($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4858,8 +4858,8 @@
 CREATE OR REPLACE FUNCTION ST_MPointFromWKB(bytea, int)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''MULTIPOINT''
-	THEN ST_GeomFromWKB($1, $2)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1, $2)) = ''MULTIPOINT''
+	THEN @extschema at .ST_GeomFromWKB($1, $2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4869,8 +4869,8 @@
 CREATE OR REPLACE FUNCTION ST_MPointFromWKB(bytea)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOINT''
-	THEN ST_GeomFromWKB($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1)) = ''MULTIPOINT''
+	THEN @extschema at .ST_GeomFromWKB($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4879,8 +4879,8 @@
 CREATE OR REPLACE FUNCTION ST_MultiPointFromWKB(bytea, int)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1,$2)) = ''MULTIPOINT''
-	THEN ST_GeomFromWKB($1, $2)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1,$2)) = ''MULTIPOINT''
+	THEN @extschema at .ST_GeomFromWKB($1, $2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4889,8 +4889,8 @@
 CREATE OR REPLACE FUNCTION ST_MultiPointFromWKB(bytea)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOINT''
-	THEN ST_GeomFromWKB($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1)) = ''MULTIPOINT''
+	THEN @extschema at .ST_GeomFromWKB($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4899,8 +4899,8 @@
 CREATE OR REPLACE FUNCTION ST_MultiLineFromWKB(bytea)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTILINESTRING''
-	THEN ST_GeomFromWKB($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1)) = ''MULTILINESTRING''
+	THEN @extschema at .ST_GeomFromWKB($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4909,8 +4909,8 @@
 CREATE OR REPLACE FUNCTION ST_MLineFromWKB(bytea, int)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''MULTILINESTRING''
-	THEN ST_GeomFromWKB($1, $2)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1, $2)) = ''MULTILINESTRING''
+	THEN @extschema at .ST_GeomFromWKB($1, $2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4919,8 +4919,8 @@
 CREATE OR REPLACE FUNCTION ST_MLineFromWKB(bytea)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTILINESTRING''
-	THEN ST_GeomFromWKB($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1)) = ''MULTILINESTRING''
+	THEN @extschema at .ST_GeomFromWKB($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4930,8 +4930,8 @@
 CREATE OR REPLACE FUNCTION ST_MPolyFromWKB(bytea, int)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
-	THEN ST_GeomFromWKB($1, $2)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
+	THEN @extschema at .ST_GeomFromWKB($1, $2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4940,8 +4940,8 @@
 CREATE OR REPLACE FUNCTION ST_MPolyFromWKB(bytea)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOLYGON''
-	THEN ST_GeomFromWKB($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1)) = ''MULTIPOLYGON''
+	THEN @extschema at .ST_GeomFromWKB($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4950,8 +4950,8 @@
 CREATE OR REPLACE FUNCTION ST_MultiPolyFromWKB(bytea, int)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
-	THEN ST_GeomFromWKB($1, $2)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
+	THEN @extschema at .ST_GeomFromWKB($1, $2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4961,8 +4961,8 @@
 CREATE OR REPLACE FUNCTION ST_MultiPolyFromWKB(bytea)
 	RETURNS geometry
 	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOLYGON''
-	THEN ST_GeomFromWKB($1)
+	SELECT CASE WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1)) = ''MULTIPOLYGON''
+	THEN @extschema at .ST_GeomFromWKB($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4972,8 +4972,8 @@
 	RETURNS geometry
 	AS '
 	SELECT CASE
-	WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''GEOMETRYCOLLECTION''
-	THEN ST_GeomFromWKB($1, $2)
+	WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1, $2)) = ''GEOMETRYCOLLECTION''
+	THEN @extschema at .ST_GeomFromWKB($1, $2)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -4984,8 +4984,8 @@
 	RETURNS geometry
 	AS '
 	SELECT CASE
-	WHEN geometrytype(ST_GeomFromWKB($1)) = ''GEOMETRYCOLLECTION''
-	THEN ST_GeomFromWKB($1)
+	WHEN @extschema at .geometrytype(@extschema at .ST_GeomFromWKB($1)) = ''GEOMETRYCOLLECTION''
+	THEN @extschema at .ST_GeomFromWKB($1)
 	ELSE NULL END
 	'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
@@ -5003,7 +5003,7 @@
 -- Availability: 1.5.0
 CREATE OR REPLACE FUNCTION ST_MaxDistance(geom1 geometry, geom2 geometry)
 	RETURNS float8
-	AS 'SELECT _ST_MaxDistance(ST_ConvexHull($1), ST_ConvexHull($2))'
+	AS 'SELECT @extschema at ._ST_MaxDistance(@extschema at .ST_ConvexHull($1), @extschema at .ST_ConvexHull($2))'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 CREATE OR REPLACE FUNCTION ST_ClosestPoint(geom1 geometry, geom2 geometry)
@@ -5023,7 +5023,7 @@
 
 CREATE OR REPLACE FUNCTION ST_LongestLine(geom1 geometry, geom2 geometry)
 	RETURNS geometry
-	AS 'SELECT _ST_LongestLine(ST_ConvexHull($1), ST_ConvexHull($2))'
+	AS 'SELECT @extschema at ._ST_LongestLine(@extschema at .ST_ConvexHull($1), @extschema at .ST_ConvexHull($2))'
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
 CREATE OR REPLACE FUNCTION _ST_DFullyWithin(geom1 geometry, geom2 geometry,float8)
@@ -5033,7 +5033,7 @@
 
 CREATE OR REPLACE FUNCTION ST_DFullyWithin(geom1 geometry, geom2 geometry, float8)
 	RETURNS boolean
-	AS 'SELECT $1 && ST_Expand($2,$3) AND $2 && ST_Expand($1,$3) AND _ST_DFullyWithin(ST_ConvexHull($1), ST_ConvexHull($2), $3)'
+	AS 'SELECT $1 OPERATOR(@extschema at .&&) @extschema at .ST_Expand($2,$3) AND $2 OPERATOR(@extschema at .&&) @extschema at .ST_Expand($1,$3) AND @extschema at ._ST_DFullyWithin(@extschema at .ST_ConvexHull($1), @extschema at .ST_ConvexHull($2), $3)'
 	LANGUAGE 'sql' IMMUTABLE;
 
 -- Availability: 2.2.0
@@ -5077,14 +5077,14 @@
 	mline geometry;
 	geom geometry;
 BEGIN
-	mline := ST_MultiLineStringFromText(geomtext, srid);
+	mline := @extschema at .ST_MultiLineStringFromText(geomtext, srid);
 
 	IF mline IS NULL
 	THEN
 		RAISE EXCEPTION 'Input is not a MultiLinestring';
 	END IF;
 
-	geom := ST_BuildArea(mline);
+	geom := @extschema at .ST_BuildArea(mline);
 
 	IF GeometryType(geom) != 'POLYGON'
 	THEN
@@ -5119,14 +5119,14 @@
 	mline geometry;
 	geom geometry;
 BEGIN
-	mline := ST_MultiLineStringFromText(geomtext, srid);
+	mline := @extschema at .ST_MultiLineStringFromText(geomtext, srid);
 
 	IF mline IS NULL
 	THEN
 		RAISE EXCEPTION 'Input is not a MultiLinestring';
 	END IF;
 
-	geom := ST_Multi(ST_BuildArea(mline));
+	geom := @extschema at .ST_Multi(@extschema at .ST_BuildArea(mline));
 
 	RETURN geom;
 END;
@@ -5142,7 +5142,7 @@
 CREATE OR REPLACE FUNCTION ST_DistanceSphere(geom1 geometry, geom2 geometry)
 	RETURNS FLOAT8
 	AS $$
-	select st_distance(geography($1),geography($2),false)
+	select @extschema at .ST_distance( @extschema at .geography($1), @extschema at .geography($2),false)
 	$$
 	LANGUAGE 'sql' IMMUTABLE STRICT
 	COST 300;
@@ -5151,8 +5151,8 @@
 -- Deprecation in 2.2.0
 CREATE OR REPLACE FUNCTION ST_distance_sphere(geom1 geometry, geom2 geometry)
 	RETURNS FLOAT8 AS
-  $$ SELECT _postgis_deprecate('ST_Distance_Sphere', 'ST_DistanceSphere', '2.2.0');
-    SELECT ST_DistanceSphere($1,$2);
+  $$ SELECT @extschema at ._postgis_deprecate('ST_Distance_Sphere', 'ST_DistanceSphere', '2.2.0');
+    SELECT @extschema at .ST_DistanceSphere($1,$2);
   $$
 	LANGUAGE 'sql' IMMUTABLE STRICT
 	COST 300;
@@ -5405,7 +5405,7 @@
 
 CREATE OR REPLACE FUNCTION ST_3DDWithin(geom1 geometry, geom2 geometry,float8)
 	RETURNS boolean
-	AS 'SELECT $1 && ST_Expand($2,$3) AND $2 && ST_Expand($1,$3) AND _ST_3DDWithin($1, $2, $3)'
+	AS 'SELECT $1 OPERATOR(@extschema at .&&) @extschema at .ST_Expand($2,$3) AND $2 OPERATOR(@extschema at .&&) @extschema at .ST_Expand($1,$3) AND @extschema at ._ST_3DDWithin($1, $2, $3)'
 	LANGUAGE 'sql' IMMUTABLE
 	COST 100;
 
@@ -5417,7 +5417,7 @@
 
 CREATE OR REPLACE FUNCTION ST_3DDFullyWithin(geom1 geometry, geom2 geometry,float8)
 	RETURNS boolean
-	AS 'SELECT $1 && ST_Expand($2,$3) AND $2 && ST_Expand($1,$3) AND _ST_3DDFullyWithin($1, $2, $3)'
+	AS 'SELECT $1 OPERATOR(@extschema at .&&) @extschema at .ST_Expand($2,$3) AND $2 OPERATOR(@extschema at .&&) @extschema at .ST_Expand($1,$3) AND @extschema at ._ST_3DDFullyWithin($1, $2, $3)'
 	LANGUAGE 'sql' IMMUTABLE
 	COST 100;
 
@@ -5429,7 +5429,7 @@
 
 CREATE OR REPLACE FUNCTION ST_3DIntersects(geom1 geometry, geom2 geometry)
 	RETURNS boolean
-	AS 'SELECT $1 && $2 AND _ST_3DIntersects($1, $2)'
+	AS 'SELECT $1 OPERATOR(@extschema at .&&) $2 AND @extschema at ._ST_3DIntersects($1, $2)'
 	LANGUAGE 'sql' IMMUTABLE
 	COST 100;
 
@@ -5488,7 +5488,7 @@
 CREATE OR REPLACE FUNCTION ST_OrderingEquals(GeometryA geometry, GeometryB geometry)
 	RETURNS boolean
 	AS $$
-	SELECT $1 ~= $2 AND _ST_OrderingEquals($1, $2)
+	SELECT $1 OPERATOR(@extschema at .~=) $2 AND @extschema at ._ST_OrderingEquals($1, $2)
 	$$
 	LANGUAGE 'sql' IMMUTABLE;
 
@@ -5506,7 +5506,7 @@
 CREATE OR REPLACE FUNCTION ST_Polygon(geometry, int)
 	RETURNS geometry
 	AS $$
-	SELECT ST_SetSRID(ST_MakePolygon($1), $2)
+	SELECT @extschema at .ST_SetSRID(@extschema at .ST_MakePolygon($1), $2)
 	$$
 	LANGUAGE 'sql' IMMUTABLE STRICT _PARALLEL;
 
@@ -5632,7 +5632,7 @@
 CREATE OR REPLACE FUNCTION overlaps_2d(geometry, box2df)
 RETURNS boolean
 AS $$
-  SELECT $2 && $1;
+  SELECT $2 OPERATOR(@extschema at .&&) $1;
 $$ LANGUAGE SQL IMMUTABLE STRICT;
 
 -- Availability: 2.3.0
@@ -5711,7 +5711,7 @@
 CREATE OR REPLACE FUNCTION overlaps_nd(geometry, gidx)
 RETURNS boolean
 AS $$
-  SELECT $2 &&& $1;
+  SELECT $2 OPERATOR(@extschema at .&&&) $1;
 $$ LANGUAGE SQL IMMUTABLE STRICT;
 
 -- Availability: 2.3.0
@@ -5867,34 +5867,34 @@
 	BEGIN
 
 		-- First compute the ConvexHull of the geometry
-		vexhull := ST_ConvexHull(param_inputgeom);
+		vexhull := @extschema at .ST_ConvexHull(param_inputgeom);
 		var_inputgeom := param_inputgeom;
 		--A point really has no concave hull
-		IF ST_GeometryType(vexhull) = 'ST_Point' OR ST_GeometryType(vexHull) = 'ST_LineString' THEN
+		IF @extschema at .ST_GeometryType(vexhull) = 'ST_Point' OR @extschema at .ST_GeometryType(vexHull) = 'ST_LineString' THEN
 			RETURN vexhull;
 		END IF;
 
 		-- convert the hull perimeter to a linestring so we can manipulate individual points
-		vexring := CASE WHEN ST_GeometryType(vexhull) = 'ST_LineString' THEN vexhull ELSE ST_ExteriorRing(vexhull) END;
-		IF abs(ST_X(ST_PointN(vexring,1))) < 1 THEN --scale the geometry to prevent stupid precision errors - not sure it works so make low for now
+		vexring := CASE WHEN @extschema at .ST_GeometryType(vexhull) = 'ST_LineString' THEN vexhull ELSE @extschema at .ST_ExteriorRing(vexhull) END;
+		IF abs(@extschema at .ST_X(@extschema at .ST_PointN(vexring,1))) < 1 THEN --scale the geometry to prevent stupid precision errors - not sure it works so make low for now
 			scale_factor := 100;
-			vexring := ST_Scale(vexring, scale_factor,scale_factor);
-			var_inputgeom := ST_Scale(var_inputgeom, scale_factor, scale_factor);
+			vexring := @extschema at .ST_Scale(vexring, scale_factor,scale_factor);
+			var_inputgeom := @extschema at .ST_Scale(var_inputgeom, scale_factor, scale_factor);
 			--RAISE NOTICE 'Scaling';
 		END IF;
-		seglength := ST_Length(vexring)/least(ST_NPoints(vexring)*2,1000) ;
+		seglength := @extschema at .ST_Length(vexring)/least(@extschema at .ST_NPoints(vexring)*2,1000) ;
 
-		vexring := ST_Segmentize(vexring, seglength);
+		vexring := @extschema at .ST_Segmentize(vexring, seglength);
 		-- find the point on the original geom that is closest to each point of the convex hull and make a new linestring out of it.
-		cavering := ST_Collect(
+		cavering := @extschema at .ST_Collect(
 			ARRAY(
 
 				SELECT
-					ST_ClosestPoint(var_inputgeom, pt ) As the_geom
+					@extschema at .ST_ClosestPoint(var_inputgeom, pt ) As the_geom
 					FROM (
-						SELECT  ST_PointN(vexring, n ) As pt, n
+						SELECT  @extschema at .ST_PointN(vexring, n ) As pt, n
 							FROM
-							generate_series(1, ST_NPoints(vexring) ) As n
+							generate_series(1, @extschema at .ST_NPoints(vexring) ) As n
 						) As pt
 
 				)
@@ -5902,19 +5902,19 @@
 		;
 
 
-		var_resultgeom := ST_MakeLine(geom)
-			FROM ST_Dump(cavering) As foo;
+		var_resultgeom := @extschema at .ST_MakeLine(geom)
+			FROM @extschema at .ST_Dump(cavering) As foo;
 
-		IF ST_IsSimple(var_resultgeom) THEN
-			var_resultgeom := ST_MakePolygon(var_resultgeom);
+		IF @extschema at .ST_IsSimple(var_resultgeom) THEN
+			var_resultgeom := @extschema at .ST_MakePolygon(var_resultgeom);
 			--RAISE NOTICE 'is Simple: %', var_resultgeom;
 		ELSE /** will not result in a valid polygon -- just return convex hull **/
 			--RAISE NOTICE 'is not Simple: %', var_resultgeom;
-			var_resultgeom := ST_ConvexHull(var_resultgeom);
+			var_resultgeom := @extschema at .ST_ConvexHull(var_resultgeom);
 		END IF;
 
 		IF scale_factor > 1 THEN -- scale the result back
-			var_resultgeom := ST_Scale(var_resultgeom, 1/scale_factor, 1/scale_factor);
+			var_resultgeom := @extschema at .ST_Scale(var_resultgeom, 1/scale_factor, 1/scale_factor);
 		END IF;
 		RETURN var_resultgeom;
 
@@ -5925,9 +5925,9 @@
 CREATE OR REPLACE FUNCTION ST_ConcaveHull(param_geom geometry, param_pctconvex float, param_allow_holes boolean DEFAULT false) RETURNS geometry AS
 $$
 	DECLARE
-		var_convhull geometry := ST_ConvexHull(param_geom);
+		var_convhull geometry := @extschema at .ST_ConvexHull(param_geom);
 		var_param_geom geometry := param_geom;
-		var_initarea float := ST_Area(var_convhull);
+		var_initarea float := @extschema at .ST_Area(var_convhull);
 		var_newarea float := var_initarea;
 		var_div integer := 6; /** this is the 1/var_div is the percent increase we will allow per triangle to keep speed decent **/
 		var_tempgeom geometry;
@@ -5944,130 +5944,130 @@
 
 		IF param_pctconvex = 1 THEN
 			return var_resultgeom;
-		ELSIF ST_GeometryType(var_param_geom) = 'ST_Polygon' THEN -- it is as concave as it is going to get
+		ELSIF @extschema at .ST_GeometryType(var_param_geom) = 'ST_Polygon' THEN -- it is as concave as it is going to get
 			IF param_allow_holes THEN -- leave the holes
 				RETURN var_param_geom;
 			ELSE -- remove the holes
-				var_resultgeom := ST_MakePolygon(ST_ExteriorRing(var_param_geom));
+				var_resultgeom := @extschema at .ST_MakePolygon(@extschema at .ST_ExteriorRing(var_param_geom));
 				RETURN var_resultgeom;
 			END IF;
 		END IF;
-		IF ST_Dimension(var_resultgeom) > 1 AND param_pctconvex BETWEEN 0 and 0.98 THEN
+		IF @extschema at .ST_Dimension(var_resultgeom) > 1 AND param_pctconvex BETWEEN 0 and 0.98 THEN
 		-- get linestring that forms envelope of geometry
-			var_enline := ST_Boundary(ST_Envelope(var_param_geom));
-			var_buf := ST_Length(var_enline)/1000.0;
-			IF ST_GeometryType(var_param_geom) = 'ST_MultiPoint' AND ST_NumGeometries(var_param_geom) BETWEEN 4 and 200 THEN
+			var_enline := @extschema at .ST_Boundary(@extschema at .ST_Envelope(var_param_geom));
+			var_buf := @extschema at .ST_Length(var_enline)/1000.0;
+			IF @extschema at .ST_GeometryType(var_param_geom) = 'ST_MultiPoint' AND @extschema at .ST_NumGeometries(var_param_geom) BETWEEN 4 and 200 THEN
 			-- we make polygons out of points since they are easier to cave in.
 			-- Note we limit to between 4 and 200 points because this process is slow and gets quadratically slow
-				var_buf := sqrt(ST_Area(var_convhull)*0.8/(ST_NumGeometries(var_param_geom)*ST_NumGeometries(var_param_geom)));
-				var_atempgeoms := ARRAY(SELECT geom FROM ST_DumpPoints(var_param_geom));
+				var_buf := sqrt(@extschema at .ST_Area(var_convhull)*0.8/(@extschema at .ST_NumGeometries(var_param_geom)*@extschema at .ST_NumGeometries(var_param_geom)));
+				var_atempgeoms := ARRAY(SELECT geom FROM @extschema at .ST_DumpPoints(var_param_geom));
 				-- 5 and 10 and just fudge factors
-				var_tempgeom := ST_Union(ARRAY(SELECT geom
+				var_tempgeom := @extschema at .ST_Union(ARRAY(SELECT geom
 						FROM (
 						-- fuse near neighbors together
-						SELECT DISTINCT ON (i) i,  ST_Distance(var_atempgeoms[i],var_atempgeoms[j]), ST_Buffer(ST_MakeLine(var_atempgeoms[i], var_atempgeoms[j]) , var_buf*5, 'quad_segs=3') As geom
+						SELECT DISTINCT ON (i) i,  @extschema at .ST_Distance(var_atempgeoms[i],var_atempgeoms[j]), @extschema at .ST_Buffer(@extschema at .ST_MakeLine(var_atempgeoms[i], var_atempgeoms[j]) , var_buf*5, 'quad_segs=3') As geom
 								FROM generate_series(1,array_upper(var_atempgeoms, 1)) As i
 									INNER JOIN generate_series(1,array_upper(var_atempgeoms, 1)) As j
 										ON (
-								 NOT ST_Intersects(var_atempgeoms[i],var_atempgeoms[j])
-									AND ST_DWithin(var_atempgeoms[i],var_atempgeoms[j], var_buf*10)
+								 NOT @extschema at .ST_Intersects(var_atempgeoms[i],var_atempgeoms[j])
+									AND @extschema at .ST_DWithin(var_atempgeoms[i],var_atempgeoms[j], var_buf*10)
 									)
 								UNION ALL
 						-- catch the ones with no near neighbors
-								SELECT i, 0, ST_Buffer(var_atempgeoms[i] , var_buf*10, 'quad_segs=3') As geom
+								SELECT i, 0, @extschema at .ST_Buffer(var_atempgeoms[i] , var_buf*10, 'quad_segs=3') As geom
 								FROM generate_series(1,array_upper(var_atempgeoms, 1)) As i
 									LEFT JOIN generate_series(ceiling(array_upper(var_atempgeoms,1)/2)::integer,array_upper(var_atempgeoms, 1)) As j
 										ON (
-								 NOT ST_Intersects(var_atempgeoms[i],var_atempgeoms[j])
-									AND ST_DWithin(var_atempgeoms[i],var_atempgeoms[j], var_buf*10)
+								 NOT @extschema at .ST_Intersects(var_atempgeoms[i],var_atempgeoms[j])
+									AND @extschema at .ST_DWithin(var_atempgeoms[i],var_atempgeoms[j], var_buf*10)
 									)
 									WHERE j IS NULL
 								ORDER BY 1, 2
 							) As foo	) );
-				IF ST_IsValid(var_tempgeom) AND ST_GeometryType(var_tempgeom) = 'ST_Polygon' THEN
-					var_tempgeom := ST_ForceSFS(ST_Intersection(var_tempgeom, var_convhull));
+				IF @extschema at .ST_IsValid(var_tempgeom) AND @extschema at .ST_GeometryType(var_tempgeom) = 'ST_Polygon' THEN
+					var_tempgeom := @extschema at .ST_ForceSFS(@extschema at .ST_Intersection(var_tempgeom, var_convhull));
 					IF param_allow_holes THEN
 						var_param_geom := var_tempgeom;
 					ELSE
-						var_param_geom := ST_MakePolygon(ST_ExteriorRing(var_tempgeom));
+						var_param_geom := @extschema at .ST_MakePolygon(@extschema at .ST_ExteriorRing(var_tempgeom));
 					END IF;
 					return var_param_geom;
-				ELSIF ST_IsValid(var_tempgeom) THEN
-					var_param_geom := ST_ForceSFS(ST_Intersection(var_tempgeom, var_convhull));
+				ELSIF @extschema at .ST_IsValid(var_tempgeom) THEN
+					var_param_geom := @extschema at .ST_ForceSFS(@extschema at .ST_Intersection(var_tempgeom, var_convhull));
 				END IF;
 			END IF;
 
-			IF ST_GeometryType(var_param_geom) = 'ST_Polygon' THEN
+			IF @extschema at .ST_GeometryType(var_param_geom) = 'ST_Polygon' THEN
 				IF NOT param_allow_holes THEN
-					var_param_geom := ST_MakePolygon(ST_ExteriorRing(var_param_geom));
+					var_param_geom := @extschema at .ST_MakePolygon(@extschema at .ST_ExteriorRing(var_param_geom));
 				END IF;
 				return var_param_geom;
 			END IF;
-            var_cent := ST_Centroid(var_param_geom);
-            IF (ST_XMax(var_enline) - ST_XMin(var_enline) ) > var_buf AND (ST_YMax(var_enline) - ST_YMin(var_enline) ) > var_buf THEN
-                    IF ST_Dwithin(ST_Centroid(var_convhull) , ST_Centroid(ST_Envelope(var_param_geom)), var_buf/2) THEN
+            var_cent := @extschema at .ST_Centroid(var_param_geom);
+            IF (@extschema at .ST_XMax(var_enline) - @extschema at .ST_XMin(var_enline) ) > var_buf AND (@extschema at .ST_YMax(var_enline) - @extschema at .ST_YMin(var_enline) ) > var_buf THEN
+                    IF @extschema at .ST_Dwithin(@extschema at .ST_Centroid(var_convhull) , @extschema at .ST_Centroid(@extschema at .ST_Envelope(var_param_geom)), var_buf/2) THEN
                 -- If the geometric dimension is > 1 and the object is symettric (cutting at centroid will not work -- offset a bit)
-                        var_cent := ST_Translate(var_cent, (ST_XMax(var_enline) - ST_XMin(var_enline))/1000,  (ST_YMAX(var_enline) - ST_YMin(var_enline))/1000);
+                        var_cent := @extschema at .ST_Translate(var_cent, (@extschema at .ST_XMax(var_enline) - @extschema at .ST_XMin(var_enline))/1000,  (@extschema at .ST_YMAX(var_enline) - @extschema at .ST_YMin(var_enline))/1000);
                     ELSE
                         -- uses closest point on geometry to centroid. I can't explain why we are doing this
-                        var_cent := ST_ClosestPoint(var_param_geom,var_cent);
+                        var_cent := @extschema at .ST_ClosestPoint(var_param_geom,var_cent);
                     END IF;
-                    IF ST_DWithin(var_cent, var_enline,var_buf) THEN
-                        var_cent := ST_centroid(ST_Envelope(var_param_geom));
+                    IF @extschema at .ST_DWithin(var_cent, var_enline,var_buf) THEN
+                        var_cent := @extschema at .ST_centroid(@extschema at .ST_Envelope(var_param_geom));
                     END IF;
                     -- break envelope into 4 triangles about the centroid of the geometry and returned the clipped geometry in each quadrant
                     FOR i in 1 .. 4 LOOP
-                       var_geoms[i] := ST_MakePolygon(ST_MakeLine(ARRAY[ST_PointN(var_enline,i), ST_PointN(var_enline,i+1), var_cent, ST_PointN(var_enline,i)]));
-                       var_geoms[i] := ST_ForceSFS(ST_Intersection(var_param_geom, ST_Buffer(var_geoms[i],var_buf)));
-                       IF ST_IsValid(var_geoms[i]) THEN
+                       var_geoms[i] := @extschema at .ST_MakePolygon(@extschema at .ST_MakeLine(ARRAY[@extschema at .ST_PointN(var_enline,i), @extschema at .ST_PointN(var_enline,i+1), var_cent, @extschema at .ST_PointN(var_enline,i)]));
+                       var_geoms[i] := @extschema at .ST_ForceSFS(@extschema at .ST_Intersection(var_param_geom, @extschema at .ST_Buffer(var_geoms[i],var_buf)));
+                       IF @extschema at .ST_IsValid(var_geoms[i]) THEN
 
                        ELSE
-                            var_geoms[i] := ST_BuildArea(ST_MakeLine(ARRAY[ST_PointN(var_enline,i), ST_PointN(var_enline,i+1), var_cent, ST_PointN(var_enline,i)]));
+                            var_geoms[i] := @extschema at .ST_BuildArea(@extschema at .ST_MakeLine(ARRAY[@extschema at .ST_PointN(var_enline,i), @extschema at .ST_PointN(var_enline,i+1), var_cent, @extschema at .ST_PointN(var_enline,i)]));
                        END IF;
                     END LOOP;
-                    var_tempgeom := ST_Union(ARRAY[ST_ConvexHull(var_geoms[1]), ST_ConvexHull(var_geoms[2]) , ST_ConvexHull(var_geoms[3]), ST_ConvexHull(var_geoms[4])]);
-                    --RAISE NOTICE 'Curr vex % ', ST_AsText(var_tempgeom);
-                    IF ST_Area(var_tempgeom) <= var_newarea AND ST_IsValid(var_tempgeom)  THEN --AND ST_GeometryType(var_tempgeom) ILIKE '%Polygon'
+                    var_tempgeom := @extschema at .ST_Union(ARRAY[@extschema at .ST_ConvexHull(var_geoms[1]), @extschema at .ST_ConvexHull(var_geoms[2]) , @extschema at .ST_ConvexHull(var_geoms[3]), @extschema at .ST_ConvexHull(var_geoms[4])]);
+                    --RAISE NOTICE 'Curr vex % ', @extschema at .ST_AsText(var_tempgeom);
+                    IF @extschema at .ST_Area(var_tempgeom) <= var_newarea AND @extschema at .ST_IsValid(var_tempgeom)  THEN --AND @extschema at .ST_GeometryType(var_tempgeom) ILIKE '%Polygon'
 
-                        var_tempgeom := ST_Buffer(ST_ConcaveHull(var_geoms[1],least(param_pctconvex + param_pctconvex/var_div),true),var_buf, 'quad_segs=2');
+                        var_tempgeom := @extschema at .ST_Buffer(@extschema at .ST_ConcaveHull(var_geoms[1],least(param_pctconvex + param_pctconvex/var_div),true),var_buf, 'quad_segs=2');
                         FOR i IN 1 .. 4 LOOP
-                            var_geoms[i] := ST_Buffer(ST_ConcaveHull(var_geoms[i],least(param_pctconvex + param_pctconvex/var_div),true), var_buf, 'quad_segs=2');
-                            IF ST_IsValid(var_geoms[i]) Then
-                                var_tempgeom := ST_Union(var_tempgeom, var_geoms[i]);
+                            var_geoms[i] := @extschema at .ST_Buffer(@extschema at .ST_ConcaveHull(var_geoms[i],least(param_pctconvex + param_pctconvex/var_div),true), var_buf, 'quad_segs=2');
+                            IF @extschema at .ST_IsValid(var_geoms[i]) Then
+                                var_tempgeom := @extschema at .ST_Union(var_tempgeom, var_geoms[i]);
                             ELSE
-                                RAISE NOTICE 'Not valid % %', i, ST_AsText(var_tempgeom);
-                                var_tempgeom := ST_Union(var_tempgeom, ST_ConvexHull(var_geoms[i]));
+                                RAISE NOTICE 'Not valid % %', i, @extschema at .ST_AsText(var_tempgeom);
+                                var_tempgeom := @extschema at .ST_Union(var_tempgeom, @extschema at .ST_ConvexHull(var_geoms[i]));
                             END IF;
                         END LOOP;
 
-                        --RAISE NOTICE 'Curr concave % ', ST_AsText(var_tempgeom);
-                        IF ST_IsValid(var_tempgeom) THEN
+                        --RAISE NOTICE 'Curr concave % ', @extschema at .ST_AsText(var_tempgeom);
+                        IF @extschema at .ST_IsValid(var_tempgeom) THEN
                             var_resultgeom := var_tempgeom;
                         END IF;
-                        var_newarea := ST_Area(var_resultgeom);
-                    ELSIF ST_IsValid(var_tempgeom) THEN
+                        var_newarea := @extschema at .ST_Area(var_resultgeom);
+                    ELSIF @extschema at .ST_IsValid(var_tempgeom) THEN
                         var_resultgeom := var_tempgeom;
                     END IF;
 
-                    IF ST_NumGeometries(var_resultgeom) > 1  THEN
-                        var_tempgeom := _ST_ConcaveHull(var_resultgeom);
-                        IF ST_IsValid(var_tempgeom) AND ST_GeometryType(var_tempgeom) ILIKE 'ST_Polygon' THEN
+                    IF @extschema at .ST_NumGeometries(var_resultgeom) > 1  THEN
+                        var_tempgeom := @extschema at ._ST_ConcaveHull(var_resultgeom);
+                        IF @extschema at .ST_IsValid(var_tempgeom) AND @extschema at .ST_GeometryType(var_tempgeom) ILIKE 'ST_Polygon' THEN
                             var_resultgeom := var_tempgeom;
                         ELSE
-                            var_resultgeom := ST_Buffer(var_tempgeom,var_buf, 'quad_segs=2');
+                            var_resultgeom := @extschema at .ST_Buffer(var_tempgeom,var_buf, 'quad_segs=2');
                         END IF;
                     END IF;
                     IF param_allow_holes = false THEN
                     -- only keep exterior ring since we do not want holes
-                        var_resultgeom := ST_MakePolygon(ST_ExteriorRing(var_resultgeom));
+                        var_resultgeom := @extschema at .ST_MakePolygon(@extschema at .ST_ExteriorRing(var_resultgeom));
                     END IF;
                 ELSE
-                    var_resultgeom := ST_Buffer(var_resultgeom,var_buf);
+                    var_resultgeom := @extschema at .ST_Buffer(var_resultgeom,var_buf);
                 END IF;
-                var_resultgeom := ST_ForceSFS(ST_Intersection(var_resultgeom, ST_ConvexHull(var_param_geom)));
+                var_resultgeom := @extschema at .ST_ForceSFS(@extschema at .ST_Intersection(var_resultgeom, @extschema at .ST_ConvexHull(var_param_geom)));
             ELSE
                 -- dimensions are too small to cut
-                var_resultgeom := _ST_ConcaveHull(var_param_geom);
+                var_resultgeom := @extschema at ._ST_ConcaveHull(var_param_geom);
             END IF;
             RETURN var_resultgeom;
 	END;
@@ -6087,7 +6087,7 @@
 -- ST_AsX3D(geom, precision, options)
 CREATE OR REPLACE FUNCTION ST_AsX3D(geom geometry, maxdecimaldigits integer DEFAULT 15, options integer DEFAULT 0)
 	RETURNS TEXT
-	AS $$SELECT _ST_AsX3D(3,$1,$2,$3,'');$$
+	AS $$SELECT @extschema at ._ST_AsX3D(3,$1,$2,$3,'');$$
 	LANGUAGE 'sql' IMMUTABLE;
 
 -- make views and spatial_ref_sys public viewable --



More information about the postgis-tickets mailing list