我有一個包含多個字段和額外outofsync字段的表。 創建觸發器和觸發器函數,在任何更新/插入之前將outofsync字段值設置爲true。更新字段按觸發器更新
觸發:
CREATE TRIGGER goods_update_outofsync
BEFORE UPDATE
ON goods
FOR EACH ROW
EXECUTE PROCEDURE tg_update_goods_outofsync();
觸發功能:
CREATE OR REPLACE FUNCTION tg_update_goods_outofsync()
RETURNS trigger AS
$BODY$
BEGIN
NEW.outofsync=true;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION tg_update_goods_outofsync()
OWNER TO postgres;
現在涉及到一個「簡單」的問題,我無法找到答案:如何手動outofsync字段更新爲假,因爲每次嘗試後都會通過觸發器自動更改爲true。
編輯:
這幾乎工程:
IF (NEW.outofsync = OLD.outofsync) THEN
NEW.outofsync=true;
END IF;
除了當outofsync領域的價值已經是假的,我想將它設置爲false,因爲它變成了真的,那麼......
非常感謝您的幫助!
因爲我不熟悉GUC並且在這個表中有很多字段(對於解決方案D),我會禁用我認爲的觸發器。謝謝! – HoGo 2013-04-23 09:39:26
http://koo.fi/blog/2013/01/08/disable-postgresql-triggers-temporarily/我想我寧願禁用當前會話中的所有觸發器,而不僅僅是全局觸發器。 – HoGo 2013-04-23 09:42:03
哦,你可以使用普通的'set_config' SQL函數,而不是'SET'語句。 – 2013-05-20 08:06:14