From 1fbd207460a2d2507224eade530d4ca6a91593fa Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Fri, 12 Jan 2018 09:38:17 +0000 Subject: [PATCH] Add check for PostgreSQL version compatibility in postgis_full_version Adds _postgis_scripts_pgsql_version() and _postgis_pgsql_version() internal functions, each returning an encoded version number, and has postgis_full_version() compare running vs. build-time used Always show PGSQL version scripts were built against References #3822 for 2.3 branch git-svn-id: http://svn.osgeo.org/postgis/branches/2.3@16267 b70326c6-7e19-0410-871a-916f4a2858ee --- NEWS | 2 ++ postgis/postgis.sql.in | 22 ++++++++++++++++++++++ postgis/sqldefines.h.in | 1 + 3 files changed, 25 insertions(+) diff --git a/NEWS b/NEWS index fb7fd0163..216843d92 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,8 @@ PostGIS 2.3.6 * Bug Fixes and Enhancements - #3713, Support encodings that happen to output a '\' character + - #3822, Have postgis_full_version() also show and check version of + PostgreSQL the scripts were built against (Sandro Santilli) - #3965, ST_ClusterKMeans used to lose some clusters on initialization (Darafei Praliaskouski) - #3956, Brin opclass object does not upgrade properly (Sandro Santilli) diff --git a/postgis/postgis.sql.in b/postgis/postgis.sql.in index 1432d97fc..ac37d03ac 100644 --- a/postgis/postgis.sql.in +++ b/postgis/postgis.sql.in @@ -2842,6 +2842,16 @@ CREATE OR REPLACE FUNCTION postgis_lib_build_date() RETURNS text AS 'MODULE_PATHNAME' LANGUAGE 'c' IMMUTABLE; +CREATE OR REPLACE FUNCTION _postgis_scripts_pgsql_version() RETURNS text + AS _POSTGIS_SQL_SELECT_POSTGIS_PGSQL_VERSION + LANGUAGE 'sql' IMMUTABLE; + +CREATE OR REPLACE FUNCTION _postgis_pgsql_version() RETURNS text +AS $$ + SELECT CASE WHEN split_part(s,'.',1)::integer > 9 THEN split_part(s,'.',1) || '0' ELSE split_part(s,'.', 1) || split_part(s,'.', 2) END AS v + FROM substring(version(), 'PostgreSQL ([0-9\.]+)') AS s; +$$ LANGUAGE 'sql' STABLE; + CREATE OR REPLACE FUNCTION postgis_full_version() RETURNS text AS $$ DECLARE @@ -2863,11 +2873,15 @@ DECLARE json_lib_ver text; sfcgal_lib_ver text; sfcgal_scr_ver text; + pgsql_scr_ver text; + pgsql_ver text; BEGIN SELECT postgis_lib_version() INTO libver; SELECT postgis_proj_version() INTO projver; SELECT postgis_geos_version() INTO geosver; SELECT postgis_libjson_version() INTO json_lib_ver; + SELECT _postgis_scripts_pgsql_version() INTO pgsql_scr_ver; + SELECT _postgis_pgsql_version() INTO pgsql_ver; BEGIN SELECT postgis_gdal_version() INTO gdalver; EXCEPTION @@ -2932,6 +2946,10 @@ BEGIN fullver = fullver || ' (liblwgeom version mismatch: "' || liblwgeomver || '")'; END IF; + fullver = fullver || ' PGSQL="' || pgsql_scr_ver || '"'; + IF pgsql_scr_ver != pgsql_ver THEN + fullver = fullver || ' (procs need upgrade for use with "' || pgsql_ver || '")'; + END IF; IF geosver IS NOT NULL THEN fullver = fullver || ' GEOS="' || geosver || '"'; @@ -2964,6 +2982,10 @@ BEGIN fullver = fullver || ' (core procs from "' || dbproc || '" need upgrade)'; END IF; + IF pgsql_scr_ver != pgsql_ver THEN + fullver = fullver || ' (procs built against PostgreSQL "' || pgsql_scr_ver || '" need upgrade)'; + END IF; + IF topo_scr_ver IS NOT NULL THEN fullver = fullver || ' TOPOLOGY'; IF topo_scr_ver != relproc THEN diff --git a/postgis/sqldefines.h.in b/postgis/sqldefines.h.in index 6080258f5..dbce6c3d4 100644 --- a/postgis/sqldefines.h.in +++ b/postgis/sqldefines.h.in @@ -26,6 +26,7 @@ */ #define _POSTGIS_SQL_SELECT_POSTGIS_VERSION 'SELECT ''@POSTGIS_VERSION@''::text AS version' #define _POSTGIS_SQL_SELECT_POSTGIS_BUILD_DATE 'SELECT ''@POSTGIS_BUILD_DATE@''::text AS version' +#define _POSTGIS_SQL_SELECT_POSTGIS_PGSQL_VERSION 'SELECT ''@POSTGIS_PGSQL_VERSION@''::text AS version' #if POSTGIS_SVN_REVISION #define _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION $$ SELECT '@POSTGIS_SCRIPTS_VERSION@'::text || ' r' || POSTGIS_SVN_REVISION::text AS version $$ -- 2.50.0