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 dieAnswerDas Datum ist größer als dasQuestionDatum. 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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage