我遇到了一個定義如下的 postgres 觸發器......
CREATE FUNCTION public.my_trigger_func() RETURNS trigger
LANGUAGE plpgsql
AS $$
BEGIN
PERFORM my_other_func(NEW.my_val);
RETURN NULL;
END;
$$;
從另一個帖子的回答中可以看出(我在 postgres 檔案中找不到明確說明的內容):
所有 PostgreSQL 觸發器都在與觸發它們的事務相同的事務中執行。
但是,my_other_func呼叫 with的函式是否PERFORM也在同一個事務中運行?或者它在這種情況下的行為是什么?
Postgres 版本:
select version();
version
------------------------------------------------------------------------------------------------------------------
PostgreSQL 12.7 (Debian 12.7-1.pgdg100 1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit
uj5u.com熱心網友回復:
檔案指出:
在所有情況下,觸發器都作為觸發它的陳述句的同一事務的一部分執行,因此如果陳述句或觸發器導致錯誤,兩者的影響都將回滾。
現在 PostgreSQL 函式總是在單個事務中執行。您可以從檔案中的此宣告中推斷出這一點:
一個程序可以在其執行期間提交或回滾事務(然后自動開始一個新事務),只要呼叫
CALL命令不是顯式事務塊的一部分。函式無法做到這一點。
結果是整個觸發器函式my_trigger_func(),包括從它呼叫的所有函式,將在與觸發它的陳述句相同的事務中執行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380444.html
標籤:PostgreSQL的
下一篇:C編程指標
