Tôi hiểu rằng các chức năng PostgreSQL được thực hiện tương tự như một giao dịch. Tuy nhiên, khi tôi cố gắng "SET LOCAL statement_timeout" trong một hàm, nó không hoạt động. Đây là cách nó hoạt động trong một giao dịch:
BEGIN;
SET LOCAL statement_timeout = 100;
SELECT pg_sleep(10);
COMMIT;
nơi kết quả (như mong đợi):
BEGIN
SET
ERROR: canceling statement due to statement timeout
ROLLBACK
Tuy nhiên, nếu tôi đặt các lệnh tương tự trong một thân hàm:
CREATE OR REPLACE FUNCTION test() RETURNS void AS '
SET LOCAL statement_timeout = 100;
SELECT pg_sleep(10);
' LANGUAGE sql;
SELECT test();
thời gian chờ không xảy ra và chức năng test()
mất 10 giây để thực thi.
Vui lòng tư vấn tại sao hai trường hợp khác nhau và cách tôi có thể sửa nó để đặt thời gian chờ câu lệnh trong một hàm.