check for overlapping time intervals - Mailing list pgsql-sql

From Wolfgang Meiners
Subject check for overlapping time intervals
Date
Msg-id kl32r0$850$1@ger.gmane.org
Whole thread Raw
Responses Re: check for overlapping time intervals  (Thomas Kellerer <spam_eater@gmx.net>)
List pgsql-sql
Hi,

I am on postgresql 9.1 and use at table like

CREATE TABLE timetable(tid   INTEGER PRIMARY KEY,gid   INTEGER REFERENCES groups(gid),day   DATE,s     TIME NOT NULL,
---starte     TIME NOT NULL, --- endCHECK (e > s));
 

Now, i need a constraint to prevent overlapping timeintervals in this
table. For this, i use a trigger:

CREATE OR REPLACE FUNCTION validate_timetable() RETURNS trigger AS $$
BEGINIF TG_OP = 'INSERT' THEN IF EXISTS(  SELECT * FROM timetable  WHERE gid = NEW.gid AND day = NEW.day  AND s < NEW.e
ANDe > NEW.s)  THEN   RAISE EXCEPTION 'overlapping intervals';  END IF;ELSIF TG_OP = 'UPDATE' THEN IF EXISTS(  SELECT *
FROMtimetable  WHERE gid = NEW.gid AND day = NEW.day  AND tid <> OLD. tid  AND s < NEW.e AND e > NEW.s)  THEN   RAISE
EXCEPTION'overlapping intervals';  END IF;END IF;RETURN NEW;
 
END; $$ LANGUAGE plpgsql;

CREATE TRIGGER validate_timetable
BEFORE INSERT OR UPDATE ON timetable
FOR EACH ROW EXECUTE PROCEDURE
validate_timetable();

Is there a simpler way to check for overlapping timeintervals? I ask
this question, because i have more similar tables with similar layout
and would have to write similar functions again and again.

Thank you for any hints
Wolfgang




pgsql-sql by date:

Previous
From: Pavel Stehule
Date:
Subject: Re: [SQL] Table indexes in a SELECT with JOIN´s
Next
From: Thomas Kellerer
Date:
Subject: Re: check for overlapping time intervals