Назад | Перейти на главную страницу

триггер postgresql для обновления нескольких столбцов

У меня есть столбец в определенной таблице, который я хочу сопоставить со столбцом в другой таблице в базе данных postgresql, поэтому я попытался создать триггер, который мог бы выполнить это:

CREATE OR REPLACE FUNCTION modify_res_partner() RETURNS TRIGGER AS $$
BEGIN
IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') THEN
UPDATE res_partner
SET x_street1=res_partner_address.street
FROM res_partner_address
WHERE res_partner.id=res_partner_address.partner_id;
END IF;
END;
$$ LANGUAGE 'plpgsql';
CREATE TRIGGER modify_res_partner_trigger
AFTER INSERT OR UPDATE OR DELETE ON res_partner_address
FOR EACH ROW EXECUTE PROCEDURE modify_res_partner();

две таблицы имеют одно и то же значение partner_id для каждой записи, но, как вы уже догадались, этот триггер выполняет запросы для каждого истинного условия, поэтому, когда я изменяю одну запись в первой таблице, триггер вызывает изменение 800 (например) на происходят для каждой подходящей пары partner_id.

как я могу изменить только запись, которая соответствует измененной записи в первой таблице?

Вам нужно изменить свой запрос, чтобы он стал таким:

UPDATE res_partner
SET x_street1=res_partner_address.street
FROM res_partner_address
WHERE res_partner.id = NEW.partner_id;

Вы должны использовать NEW строка. Это относится к вставленной строке в случае INSERT операция. Это также относится к обновленной строке в случае UPDATE операция.

Кстати, триггер для DELETE операция.