Mercurial > gemma
comparison schema/gemma.sql @ 4041:3fcb95a07948 historization_ng
WIP: Started to remove references to gauge validity.
author | Sascha Wilde <wilde@intevation.de> |
---|---|
date | Tue, 23 Jul 2019 13:10:51 +0200 |
parents | 9ab7e1056360 |
children | fbd7c012f10c |
comparison
equal
deleted
inserted
replaced
4040:39441cdc5021 | 4041:3fcb95a07948 |
---|---|
66 TABLE = TG_TABLE_NAME, | 66 TABLE = TG_TABLE_NAME, |
67 COLUMN = TG_ARGV[0], | 67 COLUMN = TG_ARGV[0], |
68 CONSTRAINT = TG_NAME; | 68 CONSTRAINT = TG_NAME; |
69 END IF; | 69 END IF; |
70 RETURN NEW; | 70 RETURN NEW; |
71 END; | |
72 $$ | |
73 LANGUAGE plpgsql; | |
74 | |
75 -- Trigger function to be used as a constraint trigger to enforce | |
76 -- existance of a referenced gauge with intersecting validity. The | |
77 -- columns with the referenced gauge isrs code an the validity are | |
78 -- given as arguments to the trigger function. | |
79 CREATE OR REPLACE FUNCTION check_valid_gauge() RETURNS trigger AS | |
80 $$ | |
81 DECLARE | |
82 -- FIXME: I'm using text for the isrs code and cast it on demand. | |
83 -- If someone is able to get it to work with isrs or isrs_base as | |
84 -- type, feel free to show me how its done... ;-) [sw] | |
85 referenced_gauge text; | |
86 new_validity tstzrange; | |
87 BEGIN | |
88 EXECUTE format('SELECT $1.%I', TG_ARGV[0]) | |
89 INTO referenced_gauge | |
90 USING NEW; | |
91 EXECUTE format('SELECT $1.%I', TG_ARGV[1]) | |
92 INTO new_validity | |
93 USING NEW; | |
94 IF EXISTS ( SELECT * FROM waterway.gauges | |
95 WHERE location = referenced_gauge::isrs | |
96 AND validity && new_validity ) | |
97 THEN | |
98 RETURN NEW; | |
99 ELSE | |
100 RAISE EXCEPTION | |
101 'new row for relation "%" violates constraint trigger "%"', | |
102 TG_TABLE_NAME, TG_NAME | |
103 USING | |
104 DETAIL = format('No matching gauge %s found.', | |
105 isrs_AsText(referenced_gauge::isrs)), | |
106 ERRCODE = 23505, | |
107 SCHEMA = TG_TABLE_SCHEMA, | |
108 TABLE = TG_TABLE_NAME, | |
109 COLUMN = TG_ARGV[0], | |
110 CONSTRAINT = TG_NAME; | |
111 END IF; | |
71 END; | 112 END; |
72 $$ | 113 $$ |
73 LANGUAGE plpgsql; | 114 LANGUAGE plpgsql; |
74 | 115 |
75 -- Trigger functions to be used as statement-level AFTER triggers, | 116 -- Trigger functions to be used as statement-level AFTER triggers, |
646 validity tstzrange NOT NULL CHECK (NOT isempty(validity)), | 687 validity tstzrange NOT NULL CHECK (NOT isempty(validity)), |
647 UNIQUE (bottleneck_id, validity), | 688 UNIQUE (bottleneck_id, validity), |
648 EXCLUDE USING GiST (bottleneck_id WITH =, validity WITH &&) | 689 EXCLUDE USING GiST (bottleneck_id WITH =, validity WITH &&) |
649 DEFERRABLE INITIALLY DEFERRED, | 690 DEFERRABLE INITIALLY DEFERRED, |
650 gauge_location isrs NOT NULL, | 691 gauge_location isrs NOT NULL, |
651 gauge_validity tstzrange NOT NULL, | |
652 CHECK(validity <@ gauge_validity), | |
653 CONSTRAINT gauge_key | |
654 FOREIGN KEY (gauge_location, gauge_validity) REFERENCES gauges | |
655 ON UPDATE CASCADE, | |
656 objnam varchar, | 692 objnam varchar, |
657 nobjnm varchar, | 693 nobjnm varchar, |
658 stretch isrsrange NOT NULL, | 694 stretch isrsrange NOT NULL, |
659 area geography(MULTIPOLYGON, 4326) NOT NULL | 695 area geography(MULTIPOLYGON, 4326) NOT NULL |
660 CHECK(ST_IsValid(CAST(area AS geometry))), | 696 CHECK(ST_IsValid(CAST(area AS geometry))), |
673 -- XXX: Also an attribut of sounding result? | 709 -- XXX: Also an attribut of sounding result? |
674 date_info timestamp with time zone NOT NULL, | 710 date_info timestamp with time zone NOT NULL, |
675 source_organization varchar NOT NULL, | 711 source_organization varchar NOT NULL, |
676 staging_done boolean NOT NULL DEFAULT false | 712 staging_done boolean NOT NULL DEFAULT false |
677 ) | 713 ) |
714 CREATE CONSTRAINT TRIGGER waterway_bottlenecks_reference_gauge | |
715 AFTER INSERT OR UPDATE OF gauge_location ON bottlenecks | |
716 FOR EACH ROW EXECUTE FUNCTION check_valid_gauge('gauge_location','validity') | |
678 -- Associate referencing objects to matching bottleneck version | 717 -- Associate referencing objects to matching bottleneck version |
679 CREATE TRIGGER move_referencing AFTER INSERT OR UPDATE OF validity | 718 CREATE TRIGGER move_referencing AFTER INSERT OR UPDATE OF validity |
680 ON bottlenecks FOR EACH ROW | 719 ON bottlenecks FOR EACH ROW |
681 EXECUTE FUNCTION move_bottleneck_referencing() | 720 EXECUTE FUNCTION move_bottleneck_referencing() |
682 | 721 |