Có phải chức năng PostgreSQL như giao dịch tự động sau đây không?Các hàm PostgreSQL có giao dịch không?
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;
Nói cách khác, nếu một lỗi xảy ra trong quá trình thực hiện các chức năng, sẽ bất kỳ thay đổi được cuộn lại? Nếu đây không phải là hành vi mặc định, làm cách nào tôi có thể thực hiện chức năng giao dịch?
Tại sao bạn không tự mình kiểm tra điều này? Chỉ cần làm một ROLLBACK và bạn biết câu trả lời là gì. Nó phải là "có". –
@ FrankHeikens câu hỏi của tôi là "sẽ thay đổi được tự động cuộn lại sau một lỗi", thay vì "sẽ thay đổi được cuộn lại nếu tôi thực thi ROLLBACK" –
@Don Hãy nhận biết rằng 'TRUNCATE' có, hoặc đã từng có, một số hành vi giao dịch hơi sôi nổi. Tôi không nhớ những chi tiết cụ thể; tìm kiếm kho lưu trữ pgsql-general. –