x
1
DECLARE
2
libver text;
3
librev text;
4
projver text;
5
projver_compiled text;
6
geosver text;
7
geosver_compiled text;
8
sfcgalver text;
9
gdalver text := NULL;
10
libxmlver text;
11
liblwgeomver text;
12
dbproc text;
13
relproc text;
14
fullver text;
15
rast_lib_ver text := NULL;
16
rast_scr_ver text := NULL;
17
topo_scr_ver text := NULL;
18
json_lib_ver text;
19
protobuf_lib_ver text;
20
wagyu_lib_ver text;
21
sfcgal_lib_ver text;
22
sfcgal_scr_ver text;
23
pgsql_scr_ver text;
24
pgsql_ver text;
25
core_is_extension bool;
26
BEGIN
27
SELECT public.postgis_lib_version() INTO libver;
28
SELECT public.postgis_proj_version() INTO projver;
29
SELECT public.postgis_geos_version() INTO geosver;
30
SELECT public.postgis_geos_compiled_version() INTO geosver_compiled;
31
SELECT public.postgis_proj_compiled_version() INTO projver_compiled;
32
SELECT public.postgis_libjson_version() INTO json_lib_ver;
33
SELECT public.postgis_libprotobuf_version() INTO protobuf_lib_ver;
34
SELECT public.postgis_wagyu_version() INTO wagyu_lib_ver;
35
SELECT public._postgis_scripts_pgsql_version() INTO pgsql_scr_ver;
36
SELECT public._postgis_pgsql_version() INTO pgsql_ver;
37
BEGIN
38
SELECT public.postgis_gdal_version() INTO gdalver;
39
EXCEPTION
40
WHEN undefined_function THEN
41
RAISE DEBUG 'Function postgis_gdal_version() not found. Is raster support enabled and rtpostgis.sql installed?';
42
END;
43
BEGIN
44
SELECT public.postgis_sfcgal_full_version() INTO sfcgalver;
45
BEGIN
46
SELECT public.postgis_sfcgal_scripts_installed() INTO sfcgal_scr_ver;
47
EXCEPTION
48
WHEN undefined_function THEN
49
sfcgal_scr_ver := 'missing';
50
END;
51
EXCEPTION
52
WHEN undefined_function THEN
53
RAISE DEBUG 'Function postgis_sfcgal_scripts_installed() not found. Is sfcgal support enabled and sfcgal.sql installed?';
54
END;
55
SELECT public.postgis_liblwgeom_version() INTO liblwgeomver;
56
SELECT public.postgis_libxml_version() INTO libxmlver;
57
SELECT public.postgis_scripts_installed() INTO dbproc;
58
SELECT public.postgis_scripts_released() INTO relproc;
59
SELECT public.postgis_lib_revision() INTO librev;
60
BEGIN
61
SELECT topology.postgis_topology_scripts_installed() INTO topo_scr_ver;
62
EXCEPTION
63
WHEN undefined_function OR invalid_schema_name THEN
64
RAISE DEBUG 'Function postgis_topology_scripts_installed() not found. Is topology support enabled and topology.sql installed?';
65
WHEN insufficient_privilege THEN
66
RAISE NOTICE 'Topology support cannot be inspected. Is current user granted USAGE on schema "topology" ?';
67
WHEN OTHERS THEN
68
RAISE NOTICE 'Function postgis_topology_scripts_installed() could not be called: % (%)', SQLERRM, SQLSTATE;
69
END;
70
71
BEGIN
72
SELECT postgis_raster_scripts_installed() INTO rast_scr_ver;
73
EXCEPTION
74
WHEN undefined_function THEN
75
RAISE DEBUG 'Function postgis_raster_scripts_installed() not found. Is raster support enabled and rtpostgis.sql installed?';
76
WHEN OTHERS THEN
77
RAISE NOTICE 'Function postgis_raster_scripts_installed() could not be called: % (%)', SQLERRM, SQLSTATE;
78
END;
79
80
BEGIN
81
SELECT public.postgis_raster_lib_version() INTO rast_lib_ver;
82
EXCEPTION
83
WHEN undefined_function THEN
84
RAISE DEBUG 'Function postgis_raster_lib_version() not found. Is raster support enabled and rtpostgis.sql installed?';
85
WHEN OTHERS THEN
86
RAISE NOTICE 'Function postgis_raster_lib_version() could not be called: % (%)', SQLERRM, SQLSTATE;
87
END;
88
89
fullver = 'POSTGIS="' || libver;
90
91
IF librev IS NOT NULL THEN
92
fullver = fullver || ' ' || librev;
93
END IF;
94
95
fullver = fullver || '"';
96
97
IF EXISTS (
98
SELECT * FROM pg_catalog.pg_extension
99
WHERE extname = 'postgis')
100
THEN
101
fullver = fullver || ' [EXTENSION]';
102
core_is_extension := true;
103
ELSE
104
core_is_extension := false;
105
END IF;
106
107
IF liblwgeomver != relproc THEN
108
fullver = fullver || ' (liblwgeom version mismatch: "' || liblwgeomver || '")';
109
END IF;
110
111
fullver = fullver || ' PGSQL="' || pgsql_scr_ver || '"';
112
IF pgsql_scr_ver != pgsql_ver THEN
113
fullver = fullver || ' (procs need upgrade for use with PostgreSQL "' || pgsql_ver || '")';
114
END IF;
115
116
IF geosver IS NOT NULL THEN
117
fullver = fullver || ' GEOS="' || geosver || '"';
118
IF (string_to_array(geosver, '.'))[1:2] != (string_to_array(geosver_compiled, '.'))[1:2]
119
THEN
120
fullver = format('%s (compiled against GEOS %s)', fullver, geosver_compiled);
121
END IF;
122
END IF;
123
124
IF sfcgalver IS NOT NULL THEN
125
fullver = fullver || ' SFCGAL="' || sfcgalver || '"';
126
END IF;
127
128
IF projver IS NOT NULL THEN
129
fullver = fullver || ' PROJ="' || projver || '"';
130
IF (string_to_array(projver, '.'))[1:3] != (string_to_array(projver_compiled, '.'))[1:3]
131
THEN
132
fullver = format('%s (compiled against PROJ %s)', fullver, projver_compiled);
133
END IF;
134
END IF;
135
136
IF gdalver IS NOT NULL THEN
137
fullver = fullver || ' GDAL="' || gdalver || '"';
138
END IF;
139
140
IF libxmlver IS NOT NULL THEN
141
fullver = fullver || ' LIBXML="' || libxmlver || '"';
142
END IF;
143
144
IF json_lib_ver IS NOT NULL THEN
145
fullver = fullver || ' LIBJSON="' || json_lib_ver || '"';
146
END IF;
147
148
IF protobuf_lib_ver IS NOT NULL THEN
149
fullver = fullver || ' LIBPROTOBUF="' || protobuf_lib_ver || '"';
150
END IF;
151
152
IF wagyu_lib_ver IS NOT NULL THEN
153
fullver = fullver || ' WAGYU="' || wagyu_lib_ver || '"';
154
END IF;
155
156
IF dbproc != relproc THEN
157
fullver = fullver || ' (core procs from "' || dbproc || '" need upgrade)';
158
END IF;
159
160
IF topo_scr_ver IS NOT NULL THEN
161
fullver = fullver || ' TOPOLOGY';
162
IF topo_scr_ver != relproc THEN
163
fullver = fullver || ' (topology procs from "' || topo_scr_ver || '" need upgrade)';
164
END IF;
165
IF core_is_extension AND NOT EXISTS (
166
SELECT * FROM pg_catalog.pg_extension
167
WHERE extname = 'postgis_topology')
168
THEN
169
fullver = fullver || ' [UNPACKAGED!]';
170
END IF;
171
END IF;
172
173
IF rast_lib_ver IS NOT NULL THEN
174
fullver = fullver || ' RASTER';
175
IF rast_lib_ver != relproc THEN
176
fullver = fullver || ' (raster lib from "' || rast_lib_ver || '" need upgrade)';
177
END IF;
178
IF core_is_extension AND NOT EXISTS (
179
SELECT * FROM pg_catalog.pg_extension
180
WHERE extname = 'postgis_raster')
181
THEN
182
fullver = fullver || ' [UNPACKAGED!]';
183
END IF;
184
END IF;
185
186
IF rast_scr_ver IS NOT NULL AND rast_scr_ver != relproc THEN
187
fullver = fullver || ' (raster procs from "' || rast_scr_ver || '" need upgrade)';
188
END IF;
189
190
IF sfcgal_scr_ver IS NOT NULL AND sfcgal_scr_ver != relproc THEN
191
fullver = fullver || ' (sfcgal procs from "' || sfcgal_scr_ver || '" need upgrade)';
192
END IF;
193
194
-- Check for the presence of deprecated functions
195
IF EXISTS ( SELECT oid FROM pg_catalog.pg_proc WHERE proname LIKE '%_deprecated_by_postgis_%' )
196
THEN
197
fullver = fullver || ' (deprecated functions exist, upgrade is not complete)';
198
END IF;
199
200
RETURN fullver;
201
END