是一個PostgreSQL函數,如下面的自動事務?PostgreSQL函數是事務性的嗎?
CREATE OR REPLACE FUNCTION refresh_materialized_view(name)
RETURNS integer AS
$BODY$
DECLARE
_table_name ALIAS FOR $1;
_entry materialized_views%ROWTYPE;
_result INT;
BEGIN
EXECUTE 'TRUNCATE TABLE ' || _table_name;
UPDATE materialized_views
SET last_refresh = CURRENT_TIMESTAMP
WHERE table_name = _table_name;
RETURN 1;
END
$BODY$
LANGUAGE plpgsql VOLATILE SECURITY DEFINER;
換句話說,如果該函數的執行過程中發生錯誤時,將任何改變是回滾?如果這不是默認行爲,我怎樣才能使功能交易?
你爲什麼不自己測試一下?只要做一個ROLLBACK,你就知道答案是什麼。它應該是「是」。 –
@FrankHeikens @frankHeikens我的問題是「將在錯誤發生後自動回滾」,而不是「如果我執行ROLLBACK將會回滾更改」 –
@Don請注意'TRUNCATE'有或曾經有一些有些時髦的交易行爲。我不記得具體細節;搜索pgsql-general檔案。 –