次のような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私の質問は、 "ROLLBACKを実行した場合、ロールバックされますか" –
@Don "TRUNCATE"にはあるものがある、または持っていたことに注意してくださいややファンキーな取引行動。私は詳細を覚えていません。 pgsql-generalアーカイブを検索します。 –