Mercurial > gemma
diff schema/gemma.sql @ 4618:0f2c3cb139cc geoserver_sql_views
Merge default into geoserver_sql_views
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Fri, 20 Sep 2019 15:35:16 +0200 |
parents | 970e90d3d5eb ce884af9f42f |
children | d2eac69ba86b |
line wrap: on
line diff
--- a/schema/gemma.sql Mon Sep 16 16:56:11 2019 +0200 +++ b/schema/gemma.sql Fri Sep 20 15:35:16 2019 +0200 @@ -4,7 +4,7 @@ -- SPDX-License-Identifier: AGPL-3.0-or-later -- License-Filename: LICENSES/AGPL-3.0.txt --- Copyright (C) 2018,2019 by via donau +-- Copyright (C) 2018, 2019 by via donau -- – Österreichische Wasserstraßen-Gesellschaft mbH -- Software engineering by Intevation GmbH @@ -256,59 +256,6 @@ -- GEMMA data -- --- Namespace not to be accessed directly by any user -CREATE SCHEMA internal - -- Profile data are only accessible via the view users.list_users. - CREATE TABLE user_profiles ( - username varchar PRIMARY KEY CHECK(octet_length(username) <= 63), - -- keep username length compatible with role identifier - map_extent box2d NOT NULL, - email_address varchar NOT NULL - ) - -- Columns referencing user-visible schemas added below. -; - - --- Namespace to be accessed by sys_admin only -CREATE SCHEMA sys_admin - CREATE TABLE system_config ( - config_key varchar PRIMARY KEY, - config_val varchar - ) - - CREATE TABLE password_reset_requests ( - hash varchar(32) PRIMARY KEY, - issued timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - username varchar NOT NULL UNIQUE - REFERENCES internal.user_profiles(username) - ON DELETE CASCADE ON UPDATE CASCADE - ) - - -- Tables with geo data to be published with GeoServer. - CREATE TABLE external_services ( - local_name varchar PRIMARY KEY, - remote_url varchar NOT NULL, - is_wfs boolean NOT NULL DEFAULT TRUE - ) - - CREATE TABLE published_services ( - schema varchar CHECK(to_regnamespace(schema) IS NOT NULL), - name varchar, - PRIMARY KEY (schema, name), - -- SQL statement used for an SQL view in GeoServer: - view_def text CHECK (is_valid_from_item(view_def)), - -- SRID to be used with SQL view: - srid int REFERENCES spatial_ref_sys, - -- SLD style document: - style xml CHECK(style IS DOCUMENT), - as_wms boolean NOT NULL DEFAULT TRUE, - as_wfs boolean NOT NULL DEFAULT TRUE, - -- Either give a valid relation or a SQL statement: - CHECK (to_regclass(schema || '.' || name) IS NOT NULL - OR view_def IS NOT NULL) - ) -; - -- -- Look-up tables with data that are static in a running system -- @@ -396,12 +343,86 @@ 'report' ); + +-- Namespace not to be accessed directly by any user +CREATE SCHEMA internal + -- Profile data are only accessible via the view users.list_users. + CREATE TABLE user_profiles ( + username varchar PRIMARY KEY CHECK(octet_length(username) <= 63), + -- keep username length compatible with role identifier + country char(2) NOT NULL REFERENCES countries, + map_extent box2d NOT NULL, + email_address varchar NOT NULL + ) + -- Columns referencing user-visible schemas added below. +; + + +-- Namespace to be accessed by sys_admin only +CREATE SCHEMA sys_admin + CREATE TABLE system_config ( + config_key varchar PRIMARY KEY, + config_val varchar + ) + + CREATE TABLE password_reset_requests ( + hash varchar(32) PRIMARY KEY, + issued timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + username varchar NOT NULL UNIQUE + REFERENCES internal.user_profiles(username) + ON DELETE CASCADE ON UPDATE CASCADE + ) + + -- Tables with geo data to be published with GeoServer. + CREATE TABLE external_services ( + local_name varchar PRIMARY KEY, + remote_url varchar NOT NULL, + is_wfs boolean NOT NULL DEFAULT TRUE + ) + + CREATE TABLE published_services ( + schema varchar CHECK(to_regnamespace(schema) IS NOT NULL), + name varchar, + PRIMARY KEY (schema, name), + -- SQL statement used for an SQL view in GeoServer: + view_def text CHECK (is_valid_from_item(view_def)), + -- SRID to be used with SQL view: + srid int REFERENCES spatial_ref_sys, + -- SLD style document: + style xml CHECK(style IS DOCUMENT), + as_wms boolean NOT NULL DEFAULT TRUE, + as_wfs boolean NOT NULL DEFAULT TRUE, + -- Either give a valid relation or a SQL statement: + CHECK (to_regclass(schema || '.' || name) IS NOT NULL + OR view_def IS NOT NULL) + ) +; + + -- Namespace for user management related data CREATE SCHEMA users - CREATE TABLE responsibility_areas ( - country char(2) PRIMARY KEY REFERENCES countries, - area geography(MULTIPOLYGON, 4326) - CHECK(ST_IsValid(CAST(area AS geometry))) + CREATE TABLE stretches ( + id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, + name varchar NOT NULL, + stretch isrsrange NOT NULL, + area geography(MULTIPOLYGON, 4326) NOT NULL + CHECK(ST_IsValid(CAST(area AS geometry))), + objnam varchar NOT NULL, + nobjnam varchar, + date_info timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, + source_organization varchar NOT NULL, + staging_done boolean NOT NULL DEFAULT false, + UNIQUE(name, staging_done) + ) + CREATE TRIGGER stretches_date_info + BEFORE UPDATE ON stretches + FOR EACH ROW EXECUTE PROCEDURE update_date_info() + + CREATE TABLE stretch_countries ( + stretch_id int NOT NULL REFERENCES stretches(id) + ON DELETE CASCADE, + country char(2) NOT NULL REFERENCES countries, + PRIMARY KEY(stretch_id, country) ) CREATE TABLE templates ( @@ -415,8 +436,7 @@ CREATE TRIGGER templates_date_info BEFORE UPDATE ON templates FOR EACH ROW EXECUTE PROCEDURE update_date_info() ; -ALTER TABLE internal.user_profiles ADD - country char(2) NOT NULL REFERENCES users.responsibility_areas; + -- Namespace for waterway data that can change in a running system CREATE SCHEMA waterway @@ -502,9 +522,6 @@ CREATE CONSTRAINT TRIGGER waterway_gauge_measurements_reference_gauge AFTER INSERT OR UPDATE OF location ON gauge_measurements FOR EACH ROW EXECUTE FUNCTION check_valid_gauge_ts('location','measure_date') - -- For fast retrieval of newest measurement per location: - CREATE INDEX gauge_measurements_location_measure_date_desc - ON waterway.gauge_measurements (location, measure_date DESC) CREATE TABLE gauge_predictions ( location isrs NOT NULL, @@ -575,30 +592,6 @@ check (pk_policy in ('sequence', 'assigned', 'autogenerated')) ) - CREATE TABLE stretches ( - id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, - name varchar NOT NULL, - stretch isrsrange NOT NULL, - area geography(MULTIPOLYGON, 4326) NOT NULL - CHECK(ST_IsValid(CAST(area AS geometry))), - objnam varchar NOT NULL, - nobjnam varchar, - date_info timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, - source_organization varchar NOT NULL, - staging_done boolean NOT NULL DEFAULT false, - UNIQUE(name, staging_done) - ) - CREATE TRIGGER stretches_date_info - BEFORE UPDATE ON stretches - FOR EACH ROW EXECUTE PROCEDURE update_date_info() - - CREATE TABLE stretch_countries ( - stretches_id int NOT NULL REFERENCES stretches(id) - ON DELETE CASCADE, - country_code char(2) NOT NULL REFERENCES countries(country_code), - UNIQUE(stretches_id, country_code) - ) - -- Like stretches without the countries CREATE TABLE sections ( id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY, @@ -614,7 +607,7 @@ UNIQUE(name, staging_done) ) CREATE TRIGGER sections_date_info - BEFORE UPDATE ON stretches + BEFORE UPDATE ON sections FOR EACH ROW EXECUTE PROCEDURE update_date_info() CREATE TABLE waterway_profiles (