Postgresql
用於更新多列的 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();
2 個表對每條記錄共享相同的值
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
操作創建觸發器。