Hallo,
ich möchte erreichen, daß bestimmte Einträge in einer Tabelle
festgelegte Bedingungen erfüllen und zwar sowohl bei INSERT als auch
bei UPDATE. Ich habe schon verschieden Möglichkeiten ausprobiert
(Trigger, Rules etc.) bis jetzt aber noch keine Lösung gefunden, bei
der beides funkioniert.
Hier kommt mein Beispiel:
Tabelle:
CREATE TABLE profil (
personid integer PRIMARY KEY,
patient boolean DEFAULT false,
untersucher boolean DEFAULT false,
operateur boolean DEFAULT false
);
jetzt ein paar Werte einfüllen:
insert into profil (1,f,t,f);
insert into profil (2,f,t,f);
Einer Person können bestimmte Profilmerkmale zugewiesen werden
(patient/ untersucher /arzt).
Bedingung: Jeder Operateur ist gleichzeitig ein Untersucher, aber nicht
jeder Untersucher ist immer ein Operateur
Variante 1)
CREATE RULE keepclean AS ON INSERT
TO profil WHERE NEW.operateur=true
DO (UPDATE profil SET untersucher = true where operateur=true);
– funktioniert prima für alle INSERTS, natürlich nicht für UPDATE,
wenn ich dieselbe Regel für UPDATE erzeuge bekomme ich als
Fehlermeldung:
infinite recursion detected in rules for relation “profil”
also habe ich’s mit einer Funktion versucht:
Variante 2)
CREATE FUNCTION profilupdate() RETURNS opaque AS ’
BEGIN
IF TG_OP = ‘‘INSERT’’ THEN
UPDATE profil SET untersucher = true WHERE personid = NEW.personid;
END IF;
RETURN NEW;
END;
’ LANGUAGE ‘plpgsql’;
CREATE TRIGGER profilupdate
AFTER INSERT OR UPDATE
ON profil FOR EACH ROW
EXECUTE PROCEDURE profilupdate();
– INSERT funktioniert richtig, UPDATE ändert nur den Wert für operateur
nicht aber für untersucher
inzwischen habe ich x varianten probiert, stundenlang zig verschiede
Dokumentationen und Handbücher gelesen und komme einfach nicht
weiter…javascript:emoticon(’ ops:’)
Ich bin für jede Idee dankbar! Wahrscheinlich hab’ ich eh nur ein riesiges Brett vorm Kopf…
Mia