我設置了一個函數,當我在tableA中插入時觸發的觸發器,我首先在tableB中創建一個條目,然後在tableC中創建一些其他條目,其中有一個外鍵與tableB相關。但是,我得到一個錯誤,因爲它試圖向tableC插入一個外鍵字段中的一個值,該值不在tableB中存在,只要該函數沒有完成運行。函數PostgreSQL 9.5中的排序結果
有沒有一種方法,在函數內部,在函數內部放置某種返回,但不會退出函數,然後執行其餘部分?一些東西,應該是這樣的:
CREATE OR REPLACE FUNCTION trigger1() RETURNS trigger AS
$BODY$
begin
insert into tableB values (new.value);
RETURN NEW;
insert into tableC (id, fkey) values (new.something, new.value);
RETURN NEW;
end;
$BODY$
LANGUAGE plpgsql;
我試圖函數在兩個不同的觸發器分開,使用字母順序命令執行,但沒有成功,也許是因爲他們都是運行之前...
有什麼想法?
感謝
感謝。我很難理解這項工作。如果推遲外鍵並且CONSTRAINT沒有得到尊重,會發生什麼?它會引發錯誤嗎?在交易結束時,它會「記住」整個交易並取消它? –
是的,在約束失敗時會引發錯誤並且事務將回滾。但是,您不必使用明確的事務。如果您沒有外部交易,那麼觸發器功能本身就是單個交易。一般而言,它的工作原理與您所期望的相同,無需更改觸發器中的任何內容。 – klin