Mercurial > gemma
comparison schema/gemma.sql @ 4389:5e38667f740c stretches-for-responsibility
Use stretches as areas of responsibility.
This is heavily based on a patch by Tom Gottfried
(read: >90% of the work was done by Tom).
author | Sascha Wilde <wilde@intevation.de> |
---|---|
date | Thu, 12 Sep 2019 18:13:47 +0200 |
parents | a7196b55c064 |
children | ce884af9f42f |
comparison
equal
deleted
inserted
replaced
4371:4a5ed371011f | 4389:5e38667f740c |
---|---|
2 -- without warranty, see README.md and license for details. | 2 -- without warranty, see README.md and license for details. |
3 | 3 |
4 -- SPDX-License-Identifier: AGPL-3.0-or-later | 4 -- SPDX-License-Identifier: AGPL-3.0-or-later |
5 -- License-Filename: LICENSES/AGPL-3.0.txt | 5 -- License-Filename: LICENSES/AGPL-3.0.txt |
6 | 6 |
7 -- Copyright (C) 2018,2019 by via donau | 7 -- Copyright (C) 2018, 2019 by via donau |
8 -- – Österreichische Wasserstraßen-Gesellschaft mbH | 8 -- – Österreichische Wasserstraßen-Gesellschaft mbH |
9 -- Software engineering by Intevation GmbH | 9 -- Software engineering by Intevation GmbH |
10 | 10 |
11 -- Author(s): | 11 -- Author(s): |
12 -- * Tom Gottfried <tom@intevation.de> | 12 -- * Tom Gottfried <tom@intevation.de> |
234 | 234 |
235 -- | 235 -- |
236 -- GEMMA data | 236 -- GEMMA data |
237 -- | 237 -- |
238 | 238 |
239 -- Namespace not to be accessed directly by any user | |
240 CREATE SCHEMA internal | |
241 -- Profile data are only accessible via the view users.list_users. | |
242 CREATE TABLE user_profiles ( | |
243 username varchar PRIMARY KEY CHECK(octet_length(username) <= 63), | |
244 -- keep username length compatible with role identifier | |
245 map_extent box2d NOT NULL, | |
246 email_address varchar NOT NULL | |
247 ) | |
248 -- Columns referencing user-visible schemas added below. | |
249 ; | |
250 | |
251 | |
252 -- Namespace to be accessed by sys_admin only | |
253 CREATE SCHEMA sys_admin | |
254 CREATE TABLE system_config ( | |
255 config_key varchar PRIMARY KEY, | |
256 config_val varchar | |
257 ) | |
258 | |
259 CREATE TABLE password_reset_requests ( | |
260 hash varchar(32) PRIMARY KEY, | |
261 issued timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
262 username varchar NOT NULL UNIQUE | |
263 REFERENCES internal.user_profiles(username) | |
264 ON DELETE CASCADE ON UPDATE CASCADE | |
265 ) | |
266 | |
267 -- Tables with geo data to be published with GeoServer. | |
268 CREATE TABLE external_services ( | |
269 local_name varchar PRIMARY KEY, | |
270 remote_url varchar NOT NULL, | |
271 is_wfs boolean NOT NULL DEFAULT TRUE | |
272 ) | |
273 | |
274 CREATE TABLE published_services ( | |
275 name regclass PRIMARY KEY, | |
276 style xml CHECK(style IS DOCUMENT), | |
277 as_wms boolean NOT NULL DEFAULT TRUE, | |
278 as_wfs boolean NOT NULL DEFAULT TRUE | |
279 ) | |
280 ; | |
281 | |
282 -- | 239 -- |
283 -- Look-up tables with data that are static in a running system | 240 -- Look-up tables with data that are static in a running system |
284 -- | 241 -- |
285 CREATE TABLE language_codes ( | 242 CREATE TABLE language_codes ( |
286 language_code varchar PRIMARY KEY | 243 language_code varchar PRIMARY KEY |
364 'map', | 321 'map', |
365 'diagram', | 322 'diagram', |
366 'report' | 323 'report' |
367 ); | 324 ); |
368 | 325 |
326 | |
327 -- Namespace not to be accessed directly by any user | |
328 CREATE SCHEMA internal | |
329 -- Profile data are only accessible via the view users.list_users. | |
330 CREATE TABLE user_profiles ( | |
331 username varchar PRIMARY KEY CHECK(octet_length(username) <= 63), | |
332 -- keep username length compatible with role identifier | |
333 country char(2) NOT NULL REFERENCES countries, | |
334 map_extent box2d NOT NULL, | |
335 email_address varchar NOT NULL | |
336 ) | |
337 -- Columns referencing user-visible schemas added below. | |
338 ; | |
339 | |
340 | |
341 -- Namespace to be accessed by sys_admin only | |
342 CREATE SCHEMA sys_admin | |
343 CREATE TABLE system_config ( | |
344 config_key varchar PRIMARY KEY, | |
345 config_val varchar | |
346 ) | |
347 | |
348 CREATE TABLE password_reset_requests ( | |
349 hash varchar(32) PRIMARY KEY, | |
350 issued timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
351 username varchar NOT NULL UNIQUE | |
352 REFERENCES internal.user_profiles(username) | |
353 ON DELETE CASCADE ON UPDATE CASCADE | |
354 ) | |
355 | |
356 -- Tables with geo data to be published with GeoServer. | |
357 CREATE TABLE external_services ( | |
358 local_name varchar PRIMARY KEY, | |
359 remote_url varchar NOT NULL, | |
360 is_wfs boolean NOT NULL DEFAULT TRUE | |
361 ) | |
362 | |
363 CREATE TABLE published_services ( | |
364 name regclass PRIMARY KEY, | |
365 style xml CHECK(style IS DOCUMENT), | |
366 as_wms boolean NOT NULL DEFAULT TRUE, | |
367 as_wfs boolean NOT NULL DEFAULT TRUE | |
368 ) | |
369 ; | |
370 | |
371 | |
369 -- Namespace for user management related data | 372 -- Namespace for user management related data |
370 CREATE SCHEMA users | 373 CREATE SCHEMA users |
371 CREATE TABLE responsibility_areas ( | 374 CREATE TABLE stretches ( |
372 country char(2) PRIMARY KEY REFERENCES countries, | 375 id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, |
373 area geography(MULTIPOLYGON, 4326) | 376 name varchar NOT NULL, |
374 CHECK(ST_IsValid(CAST(area AS geometry))) | 377 stretch isrsrange NOT NULL, |
378 area geography(MULTIPOLYGON, 4326) NOT NULL | |
379 CHECK(ST_IsValid(CAST(area AS geometry))), | |
380 objnam varchar NOT NULL, | |
381 nobjnam varchar, | |
382 date_info timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
383 source_organization varchar NOT NULL, | |
384 staging_done boolean NOT NULL DEFAULT false, | |
385 UNIQUE(name, staging_done) | |
386 ) | |
387 CREATE TRIGGER stretches_date_info | |
388 BEFORE UPDATE ON stretches | |
389 FOR EACH ROW EXECUTE PROCEDURE update_date_info() | |
390 | |
391 CREATE TABLE stretch_countries ( | |
392 stretch_id int NOT NULL REFERENCES stretches(id) | |
393 ON DELETE CASCADE, | |
394 country char(2) NOT NULL REFERENCES countries, | |
395 PRIMARY KEY(stretch_id, country) | |
375 ) | 396 ) |
376 | 397 |
377 CREATE TABLE templates ( | 398 CREATE TABLE templates ( |
378 template_name varchar NOT NULL, | 399 template_name varchar NOT NULL, |
379 template_type template_types NOT NULL DEFAULT 'map'::template_types, | 400 template_type template_types NOT NULL DEFAULT 'map'::template_types, |
383 UNIQUE (template_name, template_type, country) | 404 UNIQUE (template_name, template_type, country) |
384 ) | 405 ) |
385 CREATE TRIGGER templates_date_info BEFORE UPDATE ON templates | 406 CREATE TRIGGER templates_date_info BEFORE UPDATE ON templates |
386 FOR EACH ROW EXECUTE PROCEDURE update_date_info() | 407 FOR EACH ROW EXECUTE PROCEDURE update_date_info() |
387 ; | 408 ; |
388 ALTER TABLE internal.user_profiles ADD | 409 |
389 country char(2) NOT NULL REFERENCES users.responsibility_areas; | |
390 | 410 |
391 -- Namespace for waterway data that can change in a running system | 411 -- Namespace for waterway data that can change in a running system |
392 CREATE SCHEMA waterway | 412 CREATE SCHEMA waterway |
393 | 413 |
394 -- Eventually obsolete. | 414 -- Eventually obsolete. |
543 pk_sequence VARCHAR(64), | 563 pk_sequence VARCHAR(64), |
544 unique (table_schema, table_name, pk_column), | 564 unique (table_schema, table_name, pk_column), |
545 check (pk_policy in ('sequence', 'assigned', 'autogenerated')) | 565 check (pk_policy in ('sequence', 'assigned', 'autogenerated')) |
546 ) | 566 ) |
547 | 567 |
548 CREATE TABLE stretches ( | |
549 id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, | |
550 name varchar NOT NULL, | |
551 stretch isrsrange NOT NULL, | |
552 area geography(MULTIPOLYGON, 4326) NOT NULL | |
553 CHECK(ST_IsValid(CAST(area AS geometry))), | |
554 objnam varchar NOT NULL, | |
555 nobjnam varchar, | |
556 date_info timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
557 source_organization varchar NOT NULL, | |
558 staging_done boolean NOT NULL DEFAULT false, | |
559 UNIQUE(name, staging_done) | |
560 ) | |
561 CREATE TRIGGER stretches_date_info | |
562 BEFORE UPDATE ON stretches | |
563 FOR EACH ROW EXECUTE PROCEDURE update_date_info() | |
564 | |
565 CREATE TABLE stretch_countries ( | |
566 stretches_id int NOT NULL REFERENCES stretches(id) | |
567 ON DELETE CASCADE, | |
568 country_code char(2) NOT NULL REFERENCES countries(country_code), | |
569 UNIQUE(stretches_id, country_code) | |
570 ) | |
571 | |
572 -- Like stretches without the countries | 568 -- Like stretches without the countries |
573 CREATE TABLE sections ( | 569 CREATE TABLE sections ( |
574 id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, | 570 id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, |
575 name varchar NOT NULL, | 571 name varchar NOT NULL, |
576 section isrsrange NOT NULL, | 572 section isrsrange NOT NULL, |
582 source_organization varchar NOT NULL, | 578 source_organization varchar NOT NULL, |
583 staging_done boolean NOT NULL DEFAULT false, | 579 staging_done boolean NOT NULL DEFAULT false, |
584 UNIQUE(name, staging_done) | 580 UNIQUE(name, staging_done) |
585 ) | 581 ) |
586 CREATE TRIGGER sections_date_info | 582 CREATE TRIGGER sections_date_info |
587 BEFORE UPDATE ON stretches | 583 BEFORE UPDATE ON sections |
588 FOR EACH ROW EXECUTE PROCEDURE update_date_info() | 584 FOR EACH ROW EXECUTE PROCEDURE update_date_info() |
589 | 585 |
590 CREATE TABLE waterway_profiles ( | 586 CREATE TABLE waterway_profiles ( |
591 id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, | 587 id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, |
592 location isrs NOT NULL REFERENCES distance_marks_virtual, | 588 location isrs NOT NULL REFERENCES distance_marks_virtual, |