запись «новый» не имеет поля «i_produtos» PostgreSQL

#postgresql

#postgresql

Вопрос:

 CREATE OR REPLACE FUNCTION alter_fab() RETURNS TRIGGER   AS $alter_fab$   BEGIN  IF old.i_fabricantes != new.i_fabricantes and EXISTS(SELECT * FROM item as i  INNER JOIN VENDA ON(venda.i_vendas = i.i_vendas)  WHERE i.i_produtos = NEW.i_produtos) then   RAISE EXCEPTION 'Fabricante não pode ser alterado!';  END IF;  END; $alter_fab$ LANGUAGE plpgsql;  

таблицы

Спусковой крючок

 CREATE TRIGGER alter_fab  BEFORE UPDATE ON fabricante  FOR EACH ROW EXECUTE PROCEDURE alter_fab();  

Кто-нибудь знает, как исправить эту ошибку?

ОШИБКА: запись «новый» не содержит поля «i_produtos» КОНТЕКСТ: инструкция SQL «ВЫБЕРИТЕ старый.i_fabricantes != новый.i_fabricantes и СУЩЕСТВУЕТ(ВЫБЕРИТЕ * ИЗ элемента, когда я ПРИСОЕДИНЮСЬ К VENDA(venda.i_vendas = i.i_vendas), ГДЕ i.i_produtos = НОВЫЙ.i_produtos)»

Комментарии:

1. Это говорит вам о том, что в какой бы таблице ни находился этот триггер, в ней нет i_produtos поля или что имя поля либо смешанное, либо в верхнем регистре и должно быть заключено в двойные кавычки. Чтобы получить более точный ответ, вам нужно будет предоставить определение триггера, а также определение таблицы. Добавьте их в качестве обновления к вашему вопросу.

2. ок,,, добавляется.

3. Пожалуйста, не используйте изображения для текстовой информации. Скопируйте и вставьте эту информацию в свой вопрос. В любом случае триггер находится в таблице fabricante , и у него нет i_produtos поля, поэтому он не будет доступен в NEW записи. Вам придется пересмотреть свой запрос, чтобы включить значения, к которым у вас есть доступ. Я думаю i.i_fabricantes = NEW.i_fabricantes .