像以下这样的 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;
换句话说,如果在函数执行过程中发生错误,那么任何更改都将被回滚吗? 如果这不是默认行为,我该如何使函数具有事务性?
TRUNCATE
具有或曾经具有一些不太正常的事务行为。我不记得具体细节,请搜索pgsql-general档案。 - Craig RingerLANGUAGE SQL
编写的。 - ma11hew28TRUNCATE
忽略所有保存点并直接彻底破坏表数据。 - G_V