Einfügen verhindern, wenn Bedingung erfüllt ist
Ich habe einen tischContent
so was:
id | text | date | idUser → User | contentType
Und noch ein TischAnswer
:
idAnswer → Content | idQuestion → Content | isAccepted
Ich möchte sicherstellen, dass dieAnswer
Das Datum ist größer als dasQuestion
Datum. Eine Frage ist aContent
mitcontentType
= 'FRAGE'.
Ich habe versucht, dies mit dem folgenden Auslöser zu lösen, aber wenn ich versuche, eine einzufügenAnswer
Es liegt ein Fehler vor:
ERROR: record "new" has no field "idanswer"
CONTEXT: SQL statement "SELECT (SELECT "Content".date FROM "Content" WHERE "Content".id = NEW.idAnswer) < (SELECT "Content".date FROM "Content" WHERE "Content".id = NEW.idQuestion)"
PL/pgSQL function "check_valid_date_answer" line 2 at IF
Auslösen:
CREATE TRIGGER check_valid_answer
AFTER INSERT ON "Answer"
FOR EACH ROW EXECUTE PROCEDURE check_valid_date_answer();
Auslöserfunktion:
CREATE FUNCTION check_valid_date_answer() RETURNS trigger
LANGUAGE plpgsql
AS $BEGIN
IF (SELECT "Content".date FROM "Content"
WHERE "Content".id = NEW.idAnswer)
< (SELECT "Content".date FROM "Content"
WHERE "Content".id = NEW.idQuestion)
THEN
RAISE NOTICE 'This Answer is an invalid date';
END IF;
RETURN NEW;
END;$;
Meine Frage lautet also: Muss ich wirklich einen Auslöser dafür erstellen? Ich habe gesehen, dass ich a nicht benutzen kannCHECK
imAnswer
weil ich mit einem Attribut einer anderen Tabelle vergleichen muss. Gibt es eine andere (einfachere / bessere) Möglichkeit, dies zu tun? Wenn nicht, warum der Fehler und wie kann ich ihn beheben?