SlideShare a Scribd company logo
PRAGMA AUTONMOUS_TRANSACTIONS
Илья Космодемьянский
ik@postgresql-consulting.com
Как ни удивительно
Автономные транзакции – одна из самых неприятных проблем миграции с Oracle
на PostgreSQL
Что это такое и для чего используется
• Вложенная транзакция внутри другой транзакции
• Свой ROLLBACK и COMMIT
• Автономная транзакция может быть закомичена, даже если внешняя
откатилась
• Удобно, например для логирования
Пример
CREATE OR REPLACE function some_operation(err_msg IN VARCHAR) returns void AS
BEGIN
INSERT INTO tt(id, description) VALUES (123, ‘foo bar’);
INSERT INTO tt(id, description) VALUES (123, NULL);
EXCEPTION
WHEN OTHER THEN
PRAGMA AUTONOMOUS TRANSACTION;
INSERT INTO err_log(id, timestamp, err_msg) VALUES(nextval(‘errno’), timenow(), err_msg);
COMMIT;
RAISE not_null_violation;
END;
В PostgreSQL
• Готовых нет, но можно кое что предпринять
• Способ с dblink или plproxy
• Cпособ с savepoint
• Сообщество в курсе проблемы
savepoint
При входе в эксепшн plpgsql ставит неявный savepoint
do $code$
begin
insert into t values(1);
raise notice ’1:%’, (select count(*) from t); --1:1
begin
insert into t values(1);
raise notice ’2:%’, (select count(*) from t); --2:1
raise exception sqlstate ’ZQ001’;
exception
when sqlstate ’ZQ000’ then
raise notice ’3:%’, (select count(*) from t); --3:1
end;
raise notice ’4:%’, (select count(*) from t); --4:1
end;
$code$
savepoint - results
NOTICE: 1:2
NOTICE: 2:3
NOTICE: 3:2
NOTICE: 4:2
DO
dblink или plproxy
pl/proxy это способ вызова удаленной хранимой процедуры на языке plpgsql
• все то же самое что и с savepoint, только вместо raise notice вызов удаленной
процедуры
• не быстро и есть подводные камни
Сообщество в курсе
• https://wiki.postgresql.org/wiki/AutonomousTransactionsUnconference2015
• 2ndQuadrant имеет наработки
• В PostgreSQL будут скорее sub-транзакции
• Уровни вложенности вряд-ли будут когда-то реализованы

More Related Content

PPT
А.Власов. "Нижнеуровневая масштабируемая реализация ISO15926"
ODP
PPT
Виды алгоритмов
PDF
Symfony Workflow Component. Область применения. Первый опыт использования. ра...
PPTX
Parallelism в .net 4 и vs2010
PPTX
SECON'2017, Неволин Роман, Функциональный C#
ODP
анализ кода: от проверки стиля до автоматического тестирования
PPTX
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
А.Власов. "Нижнеуровневая масштабируемая реализация ISO15926"
Виды алгоритмов
Symfony Workflow Component. Область применения. Первый опыт использования. ра...
Parallelism в .net 4 и vs2010
SECON'2017, Неволин Роман, Функциональный C#
анализ кода: от проверки стиля до автоматического тестирования
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...

What's hot (6)

DOCX
конспект структуры алгоритмов и программ
PDF
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
PPTX
TMPA-2013 Tsytelov Trifanov Devexperts
PPTX
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
PDF
Rethinking low-code
PPTX
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
конспект структуры алгоритмов и программ
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
TMPA-2013 Tsytelov Trifanov Devexperts
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
Rethinking low-code
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
Ad

Viewers also liked (10)

PDF
Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...
PDF
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
PDF
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
PDF
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
PDF
Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский
PDF
Илья Космодемьянский, PostgreSQL-Consulting.com
PDF
PG Day'14 Russia, PostgreSQL: архитектура, настройка и оптимизация, Илья Косм...
PDF
Sequence mining
PDF
Поиск частых множеств признаков (товаров) и ассоциативные правила
PDF
pgconf.ru 2015 avito postgresql
Борис Верюгин, Диасофт Платформа. «Автоматизированные механизмы миграции прил...
Андрей Кондрашов, Банк Москвы. «АБС в крупном Банке. Тестирование PostgreSQL...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Павел Лузанов, Postgres Professional. «PostgreSQL для пользователей Oracle»
Некоторые улучшения производительности: Huge Pages – Илья Космодемьянский
Илья Космодемьянский, PostgreSQL-Consulting.com
PG Day'14 Russia, PostgreSQL: архитектура, настройка и оптимизация, Илья Косм...
Sequence mining
Поиск частых множеств признаков (товаров) и ассоциативные правила
pgconf.ru 2015 avito postgresql
Ad

More from Mail.ru Group (20)

PDF
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
PDF
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
PDF
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
PDF
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
PDF
Управление инцидентами в Почте Mail.ru, Антон Викторов
PDF
DAST в CI/CD, Ольга Свиридова
PDF
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...
PDF
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
PDF
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidia
PDF
WebAuthn в реальной жизни, Анатолий Остапенко
PDF
AMP для электронной почты, Сергей Пешков
PDF
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
PDF
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
PDF
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
PDF
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
PDF
Этика искусственного интеллекта, Александр Кармаев (AI Journey)
PDF
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
PDF
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
PDF
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
PDF
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Управление инцидентами в Почте Mail.ru, Антон Викторов
DAST в CI/CD, Ольга Свиридова
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidia
WebAuthn в реальной жизни, Анатолий Остапенко
AMP для электронной почты, Сергей Пешков
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()

Илья Космодемьянский, PostgreSQL-Consulting.com. «Pragma autonomous transaction»

  • 2. Как ни удивительно Автономные транзакции – одна из самых неприятных проблем миграции с Oracle на PostgreSQL
  • 3. Что это такое и для чего используется • Вложенная транзакция внутри другой транзакции • Свой ROLLBACK и COMMIT • Автономная транзакция может быть закомичена, даже если внешняя откатилась • Удобно, например для логирования
  • 4. Пример CREATE OR REPLACE function some_operation(err_msg IN VARCHAR) returns void AS BEGIN INSERT INTO tt(id, description) VALUES (123, ‘foo bar’); INSERT INTO tt(id, description) VALUES (123, NULL); EXCEPTION WHEN OTHER THEN PRAGMA AUTONOMOUS TRANSACTION; INSERT INTO err_log(id, timestamp, err_msg) VALUES(nextval(‘errno’), timenow(), err_msg); COMMIT; RAISE not_null_violation; END;
  • 5. В PostgreSQL • Готовых нет, но можно кое что предпринять • Способ с dblink или plproxy • Cпособ с savepoint • Сообщество в курсе проблемы
  • 6. savepoint При входе в эксепшн plpgsql ставит неявный savepoint do $code$ begin insert into t values(1); raise notice ’1:%’, (select count(*) from t); --1:1 begin insert into t values(1); raise notice ’2:%’, (select count(*) from t); --2:1 raise exception sqlstate ’ZQ001’; exception when sqlstate ’ZQ000’ then raise notice ’3:%’, (select count(*) from t); --3:1 end; raise notice ’4:%’, (select count(*) from t); --4:1 end; $code$
  • 7. savepoint - results NOTICE: 1:2 NOTICE: 2:3 NOTICE: 3:2 NOTICE: 4:2 DO
  • 8. dblink или plproxy pl/proxy это способ вызова удаленной хранимой процедуры на языке plpgsql • все то же самое что и с savepoint, только вместо raise notice вызов удаленной процедуры • не быстро и есть подводные камни
  • 9. Сообщество в курсе • https://wiki.postgresql.org/wiki/AutonomousTransactionsUnconference2015 • 2ndQuadrant имеет наработки • В PostgreSQL будут скорее sub-транзакции • Уровни вложенности вряд-ли будут когда-то реализованы