comparison schema/updates/1300/02.views_to_geoservers.sql @ 4617:ae840f9eb4c8 geoserver_sql_views

Advance schema version number Do a bigger step to allow more schema changes in default branch before we have to move here (branch geoserver_sql_views) again.
author Tom Gottfried <tom@intevation.de>
date Mon, 16 Sep 2019 16:56:11 +0200
parents schema/updates/1113/02.views_to_geoservers.sql@b605e91f08f0
children 0f2c3cb139cc
comparison
equal deleted inserted replaced
4616:b605e91f08f0 4617:ae840f9eb4c8
1 -- Copied from ../../default_sysconfig.sql
2 -- plus conflict resolution to achieve updates
3
4 CREATE TEMP TABLE base_views (name, def) AS VALUES (
5 'gauges_base_view', $$
6 SELECT
7 g.location,
8 isrs_asText(g.location) AS isrs_code,
9 g.objname,
10 g.geom,
11 g.applicability_from_km,
12 g.applicability_to_km,
13 g.validity,
14 g.zero_point,
15 g.geodref,
16 g.date_info,
17 g.source_organization,
18 g.erased,
19 r.rwls AS reference_water_levels,
20 wl.measure_date AS gm_measuredate,
21 wl.water_level AS gm_waterlevel,
22 wl_14d.n AS gm_n_14d,
23 fca.forecast_accuracy_3d,
24 fca.forecast_accuracy_1d
25 FROM waterway.gauges g
26 LEFT JOIN (SELECT location, validity,
27 json_strip_nulls(json_object_agg(
28 coalesce(depth_reference, 'empty'), value)) AS rwls
29 FROM waterway.gauges_reference_water_levels
30 GROUP BY location, validity) AS r
31 USING (location, validity)
32 LEFT JOIN (SELECT DISTINCT ON (location)
33 location,
34 measure_date,
35 water_level
36 FROM waterway.gauge_measurements
37 ORDER BY location, measure_date DESC) AS wl
38 USING (location)
39 LEFT JOIN (SELECT location, count(water_level) AS n
40 FROM waterway.gauge_measurements
41 -- consider all measurements within 14 days plus a tolerance
42 WHERE measure_date
43 >= current_timestamp - '14 days 00:15'::interval
44 GROUP BY location) AS wl_14d
45 USING (location)
46 LEFT JOIN (SELECT location,
47 max(acc) FILTER (WHERE
48 measure_date <= current_timestamp + '1 day'::interval)
49 AS forecast_accuracy_1d,
50 max(acc) AS forecast_accuracy_3d
51 FROM waterway.gauge_predictions,
52 GREATEST(water_level - lower(conf_interval),
53 upper(conf_interval) - water_level) AS acc (acc)
54 WHERE measure_date
55 BETWEEN current_timestamp
56 AND current_timestamp + '3 days'::interval
57 GROUP BY location) AS fca
58 USING (location)
59 $$);
60
61 INSERT INTO sys_admin.published_services (schema, name, srid, view_def) VALUES
62 ('waterway', 'gauges_geoserver', 4326, $$
63 SELECT
64 isrs_code,
65 objname,
66 geom,
67 applicability_from_km,
68 applicability_to_km,
69 zero_point,
70 geodref,
71 date_info,
72 source_organization,
73 reference_water_levels,
74 gm_measuredate,
75 gm_waterlevel,
76 gm_n_14d,
77 forecast_accuracy_3d,
78 forecast_accuracy_1d
79 FROM (
80 $$ || (SELECT def FROM base_views WHERE name = 'gauges_base_view') || $$
81 ) AS gauges_base_view
82 WHERE NOT erased
83 $$),
84 ('waterway', 'sections_geoserver', 4326, $$
85 SELECT
86 s.id,
87 s.name,
88 (s.section).lower::varchar as lower,
89 (s.section).upper::varchar as upper,
90 s.area::Geometry(MULTIPOLYGON, 4326),
91 s.objnam,
92 s.nobjnam,
93 s.date_info,
94 s.source_organization,
95 s.staging_done,
96 min(g.gm_measuredate) AS gm_measuredate,
97 min(g.gm_n_14d) AS gm_n_14d,
98 max(g.forecast_accuracy_3d) AS forecast_accuracy_3d,
99 max(g.forecast_accuracy_1d) AS forecast_accuracy_1d
100 FROM waterway.sections s
101 LEFT JOIN (
102 $$ || (SELECT def FROM base_views WHERE name = 'gauges_base_view') || $$
103 WHERE NOT erased) AS g
104 ON g.location <@ s.section
105 GROUP BY s.id
106 $$),
107 ('waterway', 'stretches_geoserver', 4326, $$
108 SELECT
109 s.id,
110 s.name,
111 (s.stretch).lower::varchar as lower,
112 (s.stretch).upper::varchar as upper,
113 s.area::Geometry(MULTIPOLYGON, 4326),
114 s.objnam,
115 s.nobjnam,
116 s.date_info,
117 s.source_organization,
118 (SELECT string_agg(country_code, ', ')
119 FROM waterway.stretch_countries
120 WHERE stretches_id = s.id) AS countries,
121 s.staging_done,
122 min(g.gm_measuredate) AS gm_measuredate,
123 min(g.gm_n_14d) AS gm_n_14d,
124 max(g.forecast_accuracy_3d) AS forecast_accuracy_3d,
125 max(g.forecast_accuracy_1d) AS forecast_accuracy_1d
126 FROM waterway.stretches s
127 LEFT JOIN (
128 $$ || (SELECT def FROM base_views WHERE name = 'gauges_base_view') || $$
129 WHERE NOT erased) AS g
130 ON g.location <@ s.stretch
131 GROUP BY s.id
132 $$),
133 ('waterway', 'distance_marks_ashore_geoserver', 4326, $$
134 SELECT id,
135 country,
136 geom::Geometry(POINT, 4326),
137 related_enc,
138 hectom,
139 catdis,
140 position_code
141 FROM waterway.distance_marks
142 $$),
143 ('waterway', 'distance_marks_geoserver', 4326, $$
144 SELECT
145 isrs_asText(location_code) AS location,
146 geom::Geometry(POINT, 4326),
147 related_enc,
148 (location_code).hectometre
149 FROM waterway.distance_marks_virtual
150 $$),
151 ('waterway', 'sounding_results_contour_lines_geoserver', 4326, $$
152 SELECT bottleneck_id,
153 date_info,
154 height,
155 CAST(lines AS geometry(multilinestring, 4326)) AS lines
156 FROM waterway.sounding_results_contour_lines cl
157 JOIN waterway.sounding_results sr ON sr.id = cl.sounding_result_id
158 $$),
159 ('waterway', 'bottlenecks_geoserver', 4326, $$
160 SELECT
161 b.id,
162 b.bottleneck_id,
163 b.objnam,
164 b.nobjnm,
165 b.area,
166 b.rb,
167 b.lb,
168 b.responsible_country,
169 b.revisiting_time,
170 b.limiting,
171 b.date_info,
172 b.source_organization,
173 g.objname AS gauge_objname,
174 g.reference_water_levels,
175 fal.date_info AS fa_date_info,
176 fal.critical AS fa_critical,
177 g.gm_measuredate,
178 g.gm_waterlevel,
179 g.gm_n_14d,
180 srl.date_max,
181 g.forecast_accuracy_3d,
182 g.forecast_accuracy_1d
183 FROM waterway.bottlenecks b
184 LEFT JOIN (
185 $$ || (SELECT def FROM base_views WHERE name = 'gauges_base_view') || $$
186 ) AS g
187 ON b.gauge_location = g.location
188 AND g.validity @> current_timestamp
189 LEFT JOIN (SELECT DISTINCT ON (bottleneck_id)
190 bottleneck_id, date_info, critical
191 FROM waterway.fairway_availability
192 ORDER BY bottleneck_id, date_info DESC) AS fal
193 ON b.bottleneck_id = fal.bottleneck_id
194 LEFT JOIN (SELECT DISTINCT ON (bottleneck_id)
195 bottleneck_id, max(date_info) AS date_max
196 FROM waterway.sounding_results
197 GROUP BY bottleneck_id
198 ORDER BY bottleneck_id DESC) AS srl
199 ON b.bottleneck_id = srl.bottleneck_id
200 WHERE b.validity @> current_timestamp
201 $$),
202 ('waterway', 'bottleneck_overview', 4326, $$
203 SELECT
204 objnam AS name,
205 ST_Centroid(area)::Geometry(POINT, 4326) AS point,
206 (lower(stretch)).hectometre AS from,
207 (upper(stretch)).hectometre AS to,
208 sr.current::text,
209 responsible_country
210 FROM waterway.bottlenecks bn LEFT JOIN (
211 SELECT bottleneck_id, max(date_info) AS current
212 FROM waterway.sounding_results
213 GROUP BY bottleneck_id) sr
214 ON sr.bottleneck_id = bn.bottleneck_id
215 WHERE bn.validity @> current_timestamp
216 ORDER BY objnam
217 $$),
218 ('waterway', 'sounding_differences', 4326, $$
219 SELECT
220 sd.id AS id,
221 bn.objnam AS objnam,
222 srm.date_info AS minuend,
223 srs.date_info AS subtrahend,
224 sdcl.height AS height,
225 CAST(sdcl.lines AS geometry(multilinestring, 4326)) AS lines
226 FROM caching.sounding_differences sd
227 JOIN caching.sounding_differences_contour_lines sdcl
228 ON sd.id = sdcl.sounding_differences_id
229 JOIN waterway.sounding_results srm
230 ON sd.minuend = srm.id
231 JOIN waterway.sounding_results srs
232 ON sd.subtrahend = srs.id
233 JOIN waterway.bottlenecks bn
234 ON srm.bottleneck_id = bn.bottleneck_id
235 AND srm.date_info::timestamptz <@ bn.validity
236 $$)
237 ON CONFLICT (schema, name) DO UPDATE SET
238 srid = EXCLUDED.srid,
239 view_def = EXCLUDED.view_def;
240
241 DROP VIEW
242 waterway.gauges_base_view,
243 waterway.gauges_geoserver,
244 waterway.distance_marks_geoserver,
245 waterway.distance_marks_ashore_geoserver,
246 waterway.bottlenecks_geoserver,
247 waterway.stretches_geoserver,
248 waterway.sections_geoserver,
249 waterway.sounding_results_contour_lines_geoserver,
250 waterway.bottleneck_overview,
251 waterway.sounding_differences;