
tom@797: \set ON_ERROR_STOP on
tom@797: 
tom@797: BEGIN;
tom@797: 
tom@741: 
tom@741: SET statement_timeout = 0;
tom@741: SET lock_timeout = 0;
tom@741: SET client_encoding = 'UTF8';
tom@741: SET standard_conforming_strings = on;
tom@741: SET check_function_bodies = false;
tom@741: SET client_min_messages = warning;
tom@741: 
tom@741: --
tom@741: -- Name: land; Type: SCHEMA; Schema: -; Owner: -
tom@741: --
tom@741: 
tom@741: CREATE SCHEMA land;
tom@741: 
raimund@992: SET search_path = land, pg_catalog;
tom@741: 
tom@741: 
raimund@926: CREATE FUNCTION update_letzte_aenderung() RETURNS trigger
raimund@926:     LANGUAGE plpgsql
raimund@926:     AS $$
raimund@926:     BEGIN
raimund@926:         NEW.letzte_aenderung = now();
raimund@926:         RETURN NEW;
raimund@926:     END;
raimund@926: $$;
tom@741: 
raimund@926: 
tom@741: --
raimund@1002: -- Name: update_time_status(); Type: FUNCTION; Schema: land; Owner: -
tom@741: --
tom@741: 
raimund@1002: CREATE FUNCTION update_tree_modified() RETURNS trigger
raimund@1002:     LANGUAGE plpgsql
raimund@1002:     AS $$
raimund@1002:     BEGIN
raimund@1002:         NEW.tree_modified = now();
raimund@1002:         RETURN NEW;
raimund@1002:     END;
raimund@1002: $$;
tom@741: 
tom@741: 
tom@741: --
tom@741: -- Name: update_time_messung(); Type: FUNCTION; Schema: land; Owner: -
tom@741: --
tom@741: 
raimund@1002: CREATE FUNCTION update_tree_modified_messung() RETURNS trigger
tom@741:     LANGUAGE plpgsql
tom@741:     AS $$
tom@741:     BEGIN
tom@741:         RAISE NOTICE 'messung is %',NEW.id;
tom@741:         NEW.tree_modified = now();
tom@741:         UPDATE land.messwert SET tree_modified = now() WHERE messungs_id = NEW.id;
raimund@992:         UPDATE land.status_protokoll SET tree_modified = now() WHERE messungs_id = NEW.id;
tom@741:         RETURN NEW;
tom@741:     END;
tom@741: $$;
tom@741: 
tom@741: 
tom@741: --
tom@741: -- Name: update_time_probe(); Type: FUNCTION; Schema: land; Owner: -
tom@741: --
tom@741: 
raimund@1002: CREATE FUNCTION update_tree_modified_probe() RETURNS trigger
tom@741:     LANGUAGE plpgsql
tom@741:     AS $$
tom@741:     BEGIN
tom@741:         RAISE NOTICE 'probe is %',NEW.id;
tom@741:         NEW.tree_modified = now();
tom@741:         RAISE NOTICE 'updating other rows';
tom@741:         UPDATE land.messung SET tree_modified = now() WHERE probe_id = NEW.id;
raimund@824:         UPDATE land.ortszuordnung SET tree_modified = now() WHERE probe_id = NEW.id;
tom@741:         UPDATE land.zusatz_wert SET tree_modified = now() WHERE probe_id = NEW.id;
tom@741:         RETURN NEW;
tom@741:     END;
tom@741: $$;
tom@741: 
tom@741: 
tom@741: SET default_tablespace = '';
tom@741: 
tom@741: SET default_with_oids = false;
tom@741: 
tom@741: 
tom@741: --
raimund@992: -- Name: messung_messung_id_alt_seq; Type: SEQUENCE; Schema: land; Owner: -
tom@741: --
tom@741: 
tom@741: CREATE SEQUENCE messung_messung_id_alt_seq
tom@741:     START WITH 1
tom@741:     INCREMENT BY 1
tom@741:     NO MINVALUE
tom@741:     NO MAXVALUE
tom@741:     CACHE 1;
tom@741: 
tom@741: 
tom@741: --
raimund@992: -- Name: probe_probe_id_seq; Type: SEQUENCE; Schema: land; Owner: -
tom@741: --
tom@741: 
tom@741: CREATE SEQUENCE probe_probe_id_seq
tom@741:     START WITH 1
tom@741:     INCREMENT BY 1
tom@741:     NO MINVALUE
tom@741:     NO MAXVALUE
tom@741:     CACHE 1;
tom@741: 
tom@741: 
tom@741: --
tom@900: -- Name: messprogramm; Type: TABLE; Schema: land; Owner: -; Tablespace:
tom@900: --
tom@900: 
tom@900: CREATE TABLE messprogramm (
raimund@994:     id serial PRIMARY KEY,
tom@900:     name character varying(256),
tom@900:     test boolean DEFAULT false NOT NULL,
tom@900:     netzbetreiber_id character varying(2) NOT NULL
tom@900:         REFERENCES stammdaten.netz_betreiber,
tom@900:     mst_id character varying(5) NOT NULL REFERENCES stammdaten.mess_stelle,
tom@901:     labor_mst_id character varying(5) NOT NULL
tom@901:         REFERENCES stammdaten.mess_stelle,
tom@900:     datenbasis_id integer NOT NULL REFERENCES stammdaten.datenbasis,
tom@900:     ba_id character varying(1),
tom@900:     gem_id character varying(8),
tom@989:     ort_id integer NOT NULL REFERENCES stammdaten.ort,
tom@900:     media_desk character varying(100),
tom@900:     umw_id character varying(3) REFERENCES stammdaten.umwelt,
tom@900:     probenart_id integer NOT NULL REFERENCES stammdaten.probenart,
tom@989:     probenintervall character varying(2) NOT NULL,
tom@989:     teilintervall_von integer NOT NULL,
tom@989:     teilintervall_bis integer NOT NULL,
tom@900:     intervall_offset integer,
tom@989:     gueltig_von integer NOT NULL,
tom@989:     gueltig_bis integer NOT NULL,
tom@900:     probe_nehmer_id integer,
tom@900:     probe_kommentar character varying(80),
tom@900:     letzte_aenderung timestamp without time zone DEFAULT now() NOT NULL
tom@900: );
raimund@926: CREATE TRIGGER letzte_aenderung_messprogramm BEFORE UPDATE ON messprogramm FOR EACH ROW EXECUTE PROCEDURE update_letzte_aenderung();
tom@900: 
tom@741: 
tom@741: --
tom@900: -- Name: COLUMN messprogramm.media_desk; Type: COMMENT; Schema: land; Owner: -
tom@900: --
tom@900: 
tom@900: COMMENT ON COLUMN messprogramm.media_desk IS 'dekodierte Medienbezeichnung (aus media_desk abgeleitet)';
tom@900: 
tom@900: 
tom@900: --
tom@799: -- Name: messprogramm_mmt; Type: TABLE; Schema: land; Owner: -; Tablespace:
tom@741: --
tom@741: 
tom@741: CREATE TABLE messprogramm_mmt (
raimund@996:     id serial PRIMARY KEY,
raimund@1000:     messprogramm_id integer NOT NULL REFERENCES messprogramm ON DELETE CASCADE,
raimund@1000:     mmt_id character varying(2) NOT NULL REFERENCES stammdaten.mess_methode,
tom@741:     messgroessen integer[],
tom@741:     letzte_aenderung timestamp without time zone DEFAULT now()
tom@741: );
raimund@926: CREATE TRIGGER letzte_aenderung_messprogramm_mmt BEFORE UPDATE ON messprogramm_mmt FOR EACH ROW EXECUTE PROCEDURE update_letzte_aenderung();
tom@741: 
tom@741: 
tom@741: --
tom@799: -- Name: probe; Type: TABLE; Schema: land; Owner: -; Tablespace:
tom@741: --
tom@741: 
tom@741: CREATE TABLE probe (
raimund@994:     id serial PRIMARY KEY,
raimund@993:     id_alt character varying(20) DEFAULT (('sss'::text || lpad(((nextval('land.probe_probe_id_seq'::regclass))::character varying)::text, 12, '0'::text)) || 'Y'::text) NOT NULL,
raimund@992:     test boolean DEFAULT false NOT NULL,
raimund@992:     netzbetreiber_id character varying(2) REFERENCES stammdaten.netz_betreiber,
raimund@992:     mst_id character varying(5) NOT NULL
raimund@992:         REFERENCES stammdaten.mess_stelle,
raimund@992:     labor_mst_id character varying(5) NOT NULL
raimund@992:         REFERENCES stammdaten.mess_stelle,
raimund@992:     hauptproben_nr character varying(20),
raimund@992:     datenbasis_id smallint REFERENCES stammdaten.datenbasis,
raimund@992:     ba_id character varying(1),
raimund@992:     probenart_id smallint NOT NULL REFERENCES stammdaten.probenart,
raimund@992:     media_desk character varying(100),
raimund@992:     media character varying(100),
raimund@992:     umw_id character varying(3) REFERENCES stammdaten.umwelt,
raimund@992:     probeentnahme_beginn timestamp with time zone,
raimund@992:     probeentnahme_ende timestamp with time zone,
raimund@992:     mittelungsdauer bigint,
raimund@992:     letzte_aenderung timestamp without time zone DEFAULT now(),
tom@741:     erzeuger_id integer,
tom@741:     probe_nehmer_id integer,
tom@741:     mp_kat character(1),
tom@741:     mpl_id character varying(3),
tom@741:     mpr_id integer,
tom@741:     solldatum_beginn timestamp without time zone,
tom@741:     solldatum_ende timestamp without time zone,
raimund@992:     tree_modified timestamp without time zone DEFAULT now(),
raimund@992:     UNIQUE (mst_id, hauptproben_nr)
raimund@992: );
raimund@992: CREATE TRIGGER letzte_aenderung_probe BEFORE UPDATE ON probe FOR EACH ROW EXECUTE PROCEDURE update_letzte_aenderung();
raimund@1002: CREATE TRIGGER tree_modified_probe BEFORE UPDATE ON probe FOR EACH ROW EXECUTE PROCEDURE update_tree_modified_probe();
tom@899: 
raimund@999: 
raimund@999: --
raimund@999: -- Name: kommentar_p; Type: TABLE; Schema: land; Owner: -; Tablespace:
raimund@999: --
raimund@999: 
raimund@999: CREATE TABLE kommentar_p (
raimund@999:     id serial PRIMARY KEY,
raimund@999:     erzeuger character varying(5) NOT NULL,
raimund@999:     datum timestamp without time zone DEFAULT now(),
raimund@999:     text character varying(1024),
raimund@1000:     probe_id integer NOT NULL REFERENCES probe ON DELETE CASCADE
raimund@999: );
raimund@999: 
raimund@999: 
raimund@999: --
raimund@999: -- Name: ortszuordnung; Type: TABLE; Schema: land; Owner: -; Tablespace:
raimund@999: --
raimund@999: 
raimund@999: CREATE TABLE ortszuordnung (
raimund@999:     id serial PRIMARY KEY,
raimund@1000:     probe_id integer NOT NULL REFERENCES probe ON DELETE CASCADE,
raimund@1000:     ort_id bigint NOT NULL REFERENCES stammdaten.ort,
raimund@1000:     ortszuordnung_typ character varying(1) REFERENCES stammdaten.ortszuordnung_typ,
raimund@999:     ortszusatztext character varying(100),
raimund@999:     letzte_aenderung timestamp without time zone DEFAULT now(),
raimund@999:     tree_modified timestamp without time zone DEFAULT now()
raimund@999: );
raimund@999: CREATE TRIGGER letzte_aenderung_ortszuordnung BEFORE UPDATE ON ortszuordnung FOR EACH ROW EXECUTE PROCEDURE update_letzte_aenderung();
raimund@1002: CREATE TRIGGER tree_modified_ortszuordnung BEFORE UPDATE ON ortszuordnung FOR EACH ROW EXECUTE PROCEDURE update_tree_modified();
raimund@999: 
raimund@999: 
raimund@999: --
raimund@999: -- Name: zusatz_wert; Type: TABLE; Schema: land; Owner: -; Tablespace:
raimund@999: --
raimund@999: 
raimund@999: CREATE TABLE zusatz_wert (
raimund@999:     id serial PRIMARY KEY,
raimund@1000:     probe_id integer NOT NULL REFERENCES probe ON DELETE CASCADE,
raimund@1000:     pzs_id character varying(3) NOT NULL REFERENCES stammdaten.proben_zusatz,
raimund@999:     messwert_pzs double precision,
raimund@999:     messfehler real,
raimund@999:     letzte_aenderung timestamp without time zone DEFAULT now(),
raimund@999:     nwg_zu_messwert double precision,
raimund@999:     tree_modified timestamp without time zone DEFAULT now(),
raimund@999:     UNIQUE (probe_id, pzs_id)
raimund@999: );
raimund@999: CREATE TRIGGER letzte_aenderung_zusatzwert BEFORE UPDATE ON zusatz_wert FOR EACH ROW EXECUTE PROCEDURE update_letzte_aenderung();
raimund@1002: CREATE TRIGGER tree_modified_zusatzwert BEFORE UPDATE ON zusatz_wert FOR EACH ROW EXECUTE PROCEDURE update_tree_modified();
raimund@999: 
raimund@999: 
raimund@999: --
raimund@999: -- Name: COLUMN ortszuordnung.ortszuordnung_typ; Type: COMMENT; Schema: land; Owner: -
raimund@999: --
raimund@999: 
raimund@999: COMMENT ON COLUMN ortszuordnung.ortszuordnung_typ IS 'E = Entnahmeport, U = Ursprungsort, Z = Ortszusatz';
raimund@999: 
raimund@999: 
raimund@992: --
raimund@992: -- Name: COLUMN probe.id; Type: COMMENT; Schema: land; Owner: -
raimund@992: --
tom@899: 
raimund@992: COMMENT ON COLUMN probe.id IS 'interner Probenschlüssel';
tom@899: 
tom@899: 
raimund@992: --
raimund@992: -- Name: COLUMN probe.test; Type: COMMENT; Schema: land; Owner: -
raimund@992: --
raimund@992: 
raimund@992: COMMENT ON COLUMN probe.test IS 'Ist Testdatensatz?';
raimund@992: 
raimund@992: 
raimund@992: --
raimund@992: -- Name: COLUMN probe.mst_id; Type: COMMENT; Schema: land; Owner: -
raimund@992: --
raimund@992: 
raimund@992: COMMENT ON COLUMN probe.mst_id IS 'ID für Messstelle';
raimund@992: 
raimund@992: 
raimund@992: --
raimund@992: -- Name: COLUMN probe.labor_mst_id; Type: COMMENT; Schema: land; Owner: -
raimund@992: --
raimund@992: 
raimund@992: COMMENT ON COLUMN probe.labor_mst_id IS '-- ID für Messlabor';
raimund@992: 
raimund@992: 
raimund@992: --
raimund@992: -- Name: COLUMN probe.hauptproben_nr; Type: COMMENT; Schema: land; Owner: -
raimund@992: --
raimund@992: 
raimund@992: COMMENT ON COLUMN probe.hauptproben_nr IS 'externer Probensclüssel';
raimund@992: 
raimund@992: 
raimund@992: --
raimund@992: -- Name: COLUMN probe.ba_id; Type: COMMENT; Schema: land; Owner: -
raimund@992: --
raimund@992: 
raimund@992: COMMENT ON COLUMN probe.ba_id IS 'ID der Betriebsart (normal/Routine oder Störfall/intensiv)';
raimund@992: 
raimund@992: 
raimund@992: --
raimund@992: -- Name: COLUMN probe.probenart_id; Type: COMMENT; Schema: land; Owner: -
raimund@992: --
raimund@992: 
raimund@992: COMMENT ON COLUMN probe.probenart_id IS 'ID der Probenart(Einzel-, Sammel-, Misch- ...Probe)';
raimund@992: 
raimund@992: 
raimund@992: --
raimund@992: -- Name: COLUMN probe.media_desk; Type: COMMENT; Schema: land; Owner: -
raimund@992: --
raimund@992: 
raimund@992: COMMENT ON COLUMN probe.media_desk IS 'Mediencodierung (Deskriptoren oder ADV-Codierung)';
raimund@992: 
raimund@992: 
raimund@992: --
raimund@992: -- Name: COLUMN probe.media; Type: COMMENT; Schema: land; Owner: -
raimund@992: --
raimund@992: 
raimund@992: COMMENT ON COLUMN probe.media IS 'dekodierte Medienbezeichnung (aus media_desk abgeleitet)';
raimund@992: 
raimund@992: 
raimund@992: --
raimund@992: -- Name: COLUMN probe.umw_id; Type: COMMENT; Schema: land; Owner: -
raimund@992: --
raimund@992: 
raimund@992: COMMENT ON COLUMN probe.umw_id IS 'ID für Umweltbereich';
raimund@992: 
tom@899: 
tom@741: --
raimund@999: -- Name: messung; Type: TABLE; Schema: land; Owner: -; Tablespace:
raimund@999: --
raimund@999: 
raimund@999: CREATE TABLE messung (
raimund@999:     id serial PRIMARY KEY,
raimund@999:     id_alt integer DEFAULT nextval('land.messung_messung_id_alt_seq'::regclass) NOT NULL,
raimund@1000:     probe_id integer NOT NULL REFERENCES probe ON DELETE CASCADE,
raimund@999:     nebenproben_nr character varying(10),
raimund@1000:     mmt_id character varying(2) NOT NULL REFERENCES stammdaten.mess_methode ON DELETE CASCADE,
raimund@999:     messdauer integer,
raimund@999:     messzeitpunkt timestamp with time zone,
raimund@999:     fertig boolean DEFAULT false NOT NULL,
raimund@1003:     status integer,
raimund@999:     letzte_aenderung timestamp without time zone DEFAULT now(),
raimund@999:     geplant boolean DEFAULT false NOT NULL,
raimund@999:     tree_modified timestamp without time zone DEFAULT now()
raimund@999: );
raimund@1002: CREATE TRIGGER letzte_aenderung_messung BEFORE UPDATE ON messung FOR EACH ROW EXECUTE PROCEDURE update_letzte_aenderung();
raimund@1002: CREATE TRIGGER tree_modified_messung BEFORE UPDATE ON messung FOR EACH ROW EXECUTE PROCEDURE update_tree_modified_messung();
raimund@999: 
raimund@999: 
raimund@999: --
raimund@999: -- Name: kommentar_m; Type: TABLE; Schema: land; Owner: -; Tablespace:
raimund@999: --
raimund@999: 
raimund@999: CREATE TABLE kommentar_m (
raimund@999:     id serial PRIMARY KEY,
raimund@999:     erzeuger character varying(5) NOT NULL,
raimund@999:     datum timestamp without time zone DEFAULT now(),
raimund@999:     text character varying(1024),
raimund@1000:     messungs_id integer NOT NULL REFERENCES messung ON DELETE CASCADE
raimund@999: );
raimund@999: 
raimund@999: 
raimund@999: --
raimund@999: -- Name: messwert; Type: TABLE; Schema: land; Owner: -; Tablespace:
raimund@999: --
raimund@999: 
raimund@999: CREATE TABLE messwert (
raimund@999:     id serial PRIMARY KEY,
raimund@1000:     messungs_id integer NOT NULL REFERENCES messung ON DELETE CASCADE,
raimund@1000:     messgroesse_id integer NOT NULL REFERENCES stammdaten.messgroesse,
raimund@999:     messwert_nwg character varying(1),
raimund@999:     messwert double precision NOT NULL,
raimund@999:     messfehler real,
raimund@999:     nwg_zu_messwert double precision,
raimund@1000:     meh_id smallint NOT NULL REFERENCES stammdaten.mess_einheit,
raimund@999:     grenzwertueberschreitung boolean DEFAULT false,
raimund@999:     letzte_aenderung timestamp without time zone DEFAULT now(),
raimund@999:     tree_modified timestamp without time zone DEFAULT now(),
raimund@999:     UNIQUE (messungs_id, messgroesse_id)
raimund@999: );
raimund@999: CREATE TRIGGER letzte_aenderung_messwert BEFORE UPDATE ON messwert FOR EACH ROW EXECUTE PROCEDURE update_letzte_aenderung();
raimund@1002: CREATE TRIGGER tree_modified_messwert BEFORE UPDATE ON messwert FOR EACH ROW EXECUTE PROCEDURE update_tree_modified();
raimund@999: 
raimund@999: 
raimund@999: --
tom@799: -- Name: status_protokoll; Type: TABLE; Schema: land; Owner: -; Tablespace:
raimund@751: --
raimund@751: 
raimund@751: CREATE TABLE status_protokoll (
raimund@996:     id serial PRIMARY KEY,
raimund@992:     erzeuger character varying(5) NOT NULL,
raimund@992:     datum timestamp without time zone DEFAULT now(),
raimund@992:     text character varying(1024),
raimund@1000:     messungs_id integer NOT NULL REFERENCES messung ON DELETE CASCADE,
raimund@1000:     status_stufe integer NOT NULL REFERENCES stammdaten.status_stufe,
raimund@1000:     status_wert integer NOT NULL REFERENCES stammdaten.status_wert,
raimund@992:     tree_modified timestamp without time zone DEFAULT now()
raimund@992: );
raimund@1002: CREATE TRIGGER tree_modified_status_protokoll BEFORE UPDATE ON status_protokoll FOR EACH ROW EXECUTE PROCEDURE update_tree_modified();
tom@741: 
raimund@1003: ALTER TABLE ONLY messung
raimund@1003:     ADD CONSTRAINT messung_status_protokoll_id_fkey FOREIGN KEY (status) REFERENCES status_protokoll(id);
raimund@1003: 
tom@741: 
tom@741: --
tom@799: -- Name: messung_probe_id_idx; Type: INDEX; Schema: land; Owner: -; Tablespace:
tom@741: --
tom@741: 
tom@741: CREATE INDEX messung_probe_id_idx ON messung USING btree (probe_id);
tom@741: 
tom@741: 
tom@741: --
raimund@1004: -- Name: ort_probe_id_idx; Type: INDEX; Schema: land; Owner: -; Tablespace:
raimund@1004: --
raimund@1004: 
raimund@1004: CREATE INDEX ort_probe_id_idx ON ortszuordnung USING btree (probe_id);
raimund@1004: 
raimund@1004: 
raimund@1004: --
raimund@1004: -- Name: zusatz_wert_probe_id_idx; Type: INDEX; Schema: land; Owner: -; Tablespace:
raimund@1004: --
raimund@1004: 
raimund@1004: CREATE INDEX zusatz_wert_probe_id_idx ON zusatz_wert USING btree (probe_id);
raimund@1004: 
raimund@1004: 
raimund@1004: --
raimund@1004: -- Name: kommentar_probe_id_idx; Type: INDEX; Schema: land; Owner: -; Tablespace:
raimund@1004: --
raimund@1004: 
raimund@1004: CREATE INDEX kommentar_probe_id_idx ON kommentar_p USING btree (probe_id);
raimund@1004: 
raimund@1004: 
raimund@1004: --
tom@799: -- Name: messwert_messungs_id_idx; Type: INDEX; Schema: land; Owner: -; Tablespace:
tom@741: --
tom@741: 
tom@741: CREATE INDEX messwert_messungs_id_idx ON messwert USING btree (messungs_id);
tom@741: 
tom@741: 
tom@741: --
raimund@1004: -- Name: status_messungs_id_idx; Type: INDEX; Schema: land; Owner: -; Tablespace:
tom@741: --
tom@741: 
raimund@1004: CREATE INDEX status_messungs_id_idx ON status_protokoll USING btree (messungs_id);
raimund@1004: 
raimund@1004: 
raimund@1004: --
raimund@1004: -- Name: kommentar_messungs_id_idx; Type: INDEX; Schema: land; Owner: -; Tablespace:
raimund@1004: --
raimund@1004: 
raimund@1004: CREATE INDEX kommentar_messungs_id_idx ON kommentar_m USING btree (messungs_id);
tom@741: 
tom@741: 
tom@797: COMMIT;




