Запретить вставку, если условие выполнено
У меня есть столContent
как это:
id | text | date | idUser → User | contentType
И еще один столAnswer
:
idAnswer → Content | idQuestion → Content | isAccepted
Я хочу убедиться, чтоAnswer
дата больше, чемQuestion
дата ВопросContent
сcontentType
= 'ВОПРОС'.
Я пытался решить эту проблему с помощью следующего триггера, но когда я пытаюсь вставитьAnswer
есть ошибка:
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
Спусковой крючок:
CREATE TRIGGER check_valid_answer
AFTER INSERT ON "Answer"
FOR EACH ROW EXECUTE PROCEDURE check_valid_date_answer();
Функция запуска:
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;$;
Итак, мой вопрос: мне действительно нужно создать триггер для этого? Я видел, что я не могу использоватьCHECK
вAnswer
потому что мне нужно сравнить с атрибутом другой таблицы. Есть ли другой (проще / лучше) способ сделать это? Если нет, то почему ошибка и как я могу ее решить?