У меня есть столбец в определенной таблице, который я хочу сопоставить со столбцом в другой таблице в базе данных 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
операция.