Атомарность функций PostgreSQL/Greenplum

Я жил с уверенностью, что функции в постгресе оборачиваются в неявную транзакцию -> обладают свойством атомарности.

Столкнулся с любопытной ситуацией, когда это свойство нарушается. Функция выглядит примерно так:

CREATE OR REPLACE FUNCTION scm.func_name()
 RETURNS boolean
 LANGUAGE plpgsql
AS $function$

declare
    v_int int;
 
begin
    
    create table stg.test_table1 as
    select * from scm.table;


    -- v_int := 1/0;

    create table stg.test_table2 as
    select * from scm.table;


return true;
    exception when others then
    raise notice 'ERROR :%', SQLERRM;
    RETURN FALSE;
end;  
$function$

Если функция падает по нехватке места с ошибкой schema's disk space quota exceeded with name: scm при создании stg.test_table2 , stg.test_table1 останется существовать в БД

Если искусственно создать ошибку другого характера, раскомментив v_int := 1/0; , stg.test_table1 в БД не останется

Подскажите, пожалуйста:

  1. Есть какой-то перечень ошибок, которые не откатывают функцию целиком? Можно его-то посмотреть?
  2. Есть ли какие-то настройки на уровне сервера, регулирующие поведение БД в подобной ситуации?

p.s. Greenplum 6.26 в сборке от Аренадаты , на основе PostgreSQL 9.4.26


Ответы (0 шт):