User Tools

Site Tools


wiki:postgres:pg_tune_kurs_exclusionconstraints

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

wiki:postgres:pg_tune_kurs_exclusionconstraints [2017/09/28 12:21] (current)
Line 1: Line 1:
 +====== Exclusion Constraints ======
 +**Exclusion Constraints = Erhöhte Datenkonsistenz ohne sich einen Wolf zu schreiben.**\\ \\
 +Ein Beispiel wie man Überbuchung von Räumen für Vorträge (zeitliche-räumliche Überlappung)
 +mittels Exclusion Constraints verhindern kann ist {{:​postgres:​beyond_unique.pdf|FOSDEM2010:​Beyond UNIQUE}}.
 +\\
 +**Den Datentyp "​PERIOD"​ gibt es in der offiziellen Verion 9.0 nicht (aber als Erweiterung auf pgFoundry)**\\
  
 +  /* overlaps() function = && Operator - P1 && P2 ist das Selbe wie overlaps(P1,​ P2)
 +  Spalten oder Expressions werden unterstützt (room, during)
 +  Der Exclusion Operator (=, &&,​...) muß von GIST unterstützt werden.
 +  CREATE TABLE bookings(
 +    title text,
 +    room text,
 +    during period,
 +    EXCLUDE USING gist  -- zur Zeit wird nur GIST unterstützt
 +     (room WITH =,      -- seleber Raum
 +      during WITH &&​) ​  -- zeitüberlappend (damit sich Kurse im selben Raum nicht zeitlich überschneiden).
 +     );
 +  NOTICE: CREATE TABLE / EXCLUDE will create implicit index "​bookings_room_during_exclusion"​ for table "​bookings"​
 +
 +===== Multiple Constraints =====
 +
 +  /​*Multi-columns Constraints sind immer ANDed; Solange eine der Spalten nicht im Konflikt steht, ist das Tupel erlaubt.
 +  Um OR zu erreichen benötigt man mehrere Constraints.*/​
 +  CREATE TABLE bookings(
 +    title text,
 +    room text,
 +    during period,
 +    EXCLUDE USING gist
 +      (room WITH =),
 +    EXCLUDE USING gist
 +      (during WITH &&)
 +    );
 +
 +  CREATE TABLE bookings(
 +    title text,
 +    room text,
 +    teacher text,
 +    during period,
 +    EXCLUDE USING gist
 +      (room WITH =, during WITH &&​),​
 +    EXCLUDE USING gist
 +      (teacher WITH =, during WITH &&)
 +  );
 +
 +===== Unique redefinieren =====
 +**Schlechtere Performance aber mehr Datentypen**
 +  CREATE TABLE bookings(
 +    title text, room text,
 +    during period,
 +    EXCLUDE USING gist
 +     (room WITH =),
 +   );
 +  ​
 +  CREATE TABLE bookings(
 +    title text, room text UNIQUE,
 +    during period
 +  );
 +
 +===== Partielle Constraints =====
 +  CREATE TABLE bookings(
 +    title text,
 +    room text,
 +    during period,
 +    EXCLUDE USING gist
 +      (room WITH =, during WITH &&)
 +       WHERE (during >>
 +         ​period('​2010-01-01'::​timestamptz))
 +  );
wiki/postgres/pg_tune_kurs_exclusionconstraints.txt · Last modified: 2017/09/28 12:21 (external edit)