view schema/updates/1406/01.distinguish_bcnlat_hydro_ienc.sql @ 5030:737d7859dd86

Store fairway dimensions as MultiPolygon This avoids storing a single invalid geometry from the data source as multiple valid geometries with duplicate attribute sets. The previous behaviour was not correctly handled in import tracking, because only the ID of the first item in a set of multiple geometries generated from a single entry from the data source was tracked.
author Tom Gottfried <tom@intevation.de>
date Wed, 18 Mar 2020 18:42:30 +0100
parents 1e47ba2a58f2
children
line wrap: on
line source

CREATE TABLE waterway.fairway_marks_bcnlat_new (
    colour varchar,
    colpat varchar,
    condtn int,
    bcnshp int,
    catlam int
) INHERITS (waterway.fairway_marks);

CREATE TABLE waterway.fairway_marks_bcnlat_hydro (
    id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY
) INHERITS (waterway.fairway_marks_bcnlat_new);
CREATE UNIQUE INDEX fairway_marks_bcnlat_hydro_distinct_rows
    ON waterway.fairway_marks_bcnlat_hydro
    ((CAST((validity, last_found, geom,
            datsta, datend, persta, perend, objnam, nobjnm, inform, ninfom,
            scamin, picrep, txtdsc, sordat, sorind,
            colour, colpat, condtn, bcnshp, catlam, 0
        ) AS waterway.fairway_marks_bcnlat_hydro)
    ));

CREATE TABLE waterway.fairway_marks_bcnlat_ienc (
    id int PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY
) INHERITS (waterway.fairway_marks_bcnlat_new);
CREATE UNIQUE INDEX fairway_marks_bcnlat_ienc_distinct_rows
    ON waterway.fairway_marks_bcnlat_ienc
    ((CAST((validity, last_found, geom,
            datsta, datend, persta, perend, objnam, nobjnm, inform, ninfom,
            scamin, picrep, txtdsc, sordat, sorind,
            colour, colpat, condtn, bcnshp, catlam, 0
        ) AS waterway.fairway_marks_bcnlat_ienc)
    ));

-- Assume all features are IENC features, since there is currently no known
-- data source for HYDRO features
INSERT INTO waterway.fairway_marks_bcnlat_ienc
    SELECT validity, last_found, geom,
            datsta, datend, persta, perend, objnam, nobjnm, inform, ninfom,
            scamin, picrep, txtdsc, sordat, sorind,
            colour, colpat, condtn, bcnshp, catlam, id
        FROM waterway.fairway_marks_bcnlat;
SELECT setval(
        pg_get_serial_sequence('waterway.fairway_marks_bcnlat_ienc', 'id'),
        max(id))
    FROM waterway.fairway_marks_bcnlat_ienc;

-- Let foreign key constraint point to new table
ALTER TABLE waterway.fairway_marks_bcnlat_dirimps
    DROP CONSTRAINT fairway_marks_bcnlat_dirimps_fm_bcnlat_id_fkey,
    ADD FOREIGN KEY (fm_bcnlat_id)
        REFERENCES waterway.fairway_marks_bcnlat_ienc;

-- Finally
DROP TABLE waterway.fairway_marks_bcnlat;
ALTER TABLE waterway.fairway_marks_bcnlat_new RENAME TO fairway_marks_bcnlat;

GRANT SELECT on ALL tables in schema waterway TO waterway_user;
GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA waterway
    TO waterway_admin;