- ВКонтакте
- РћРТвЂВВВВВВВВнокласснРСвЂВВВВВВВВРєРСвЂВВВВВВВВ
- РњРѕР№ Р В Р’В Р РЋРЎв„ўР В Р’В Р РЋРІР‚ВВВВВВВВРЎР‚
- Viber
- Skype
- Telegram
Атомарность функций 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
в БД не останется
Подскажите, пожалуйста:
- Есть какой-то перечень ошибок, которые не откатывают функцию целиком? Можно его-то посмотреть?
- Есть ли какие-то настройки на уровне сервера, регулирующие поведение БД в подобной ситуации?
p.s. Greenplum 6.26 в сборке от Аренадаты , на основе PostgreSQL 9.4.26