перераспределить / скомпилировать до 1 раздела перед сохранением (вы все равно получите папку, но в ней будет один файл детали)
Оба ответа до сих пор неверны. Если вы попытаетесь запустить транзакцию или использовать SAVEPOINT
внутри функции plpgsql, вы получите сообщение об ошибке следующим образом:
ERROR: cannot begin/end transactions in PL/pgSQL HINT: Use a BEGIN block with an EXCEPTION clause instead. CONTEXT: PL/pgSQL function "f_savepoint" line 6 at SQL statement
Если вы попробуете
SAVEPOINT
внутри простая функция SQL:ERROR: SAVEPOINT is not allowed in a SQL function CONTEXT: SQL function "f_savepoint2" during startup
Как указано в сообщении об ошибке, используйте блок
BEGIN
внутри функции plpgsql. Ваша демонстрация может выглядеть так:CREATE OR REPLACE FUNCTION transact_test(boolean) RETURNS boolean AS $func$ BEGIN -- start a nested BEGIN block UPDATE t SET i = i+1 WHERE i = 1; UPDATE t SET i = i+1 WHERE i = 3; IF $1 THEN RAISE EXCEPTION 'foo'; -- cancels all of the above END IF; RETURN TRUE; EXCEPTION WHEN OTHERS THEN RETURN FALSE; -- do nothing END $func$ LANGUAGE plpgsql;
-> SQLfiddle , демонстрируя все это.