Статья основана на двадцатом видео из 31 темы курса SQL 2.0 — PL/pgSQL в PostgreSQL от Аристова Евгения, который является логическим продолжением курса SQL c 0. Ссылки на видео на платформах RUTUBE и VK video.
В данной статье подробно разбираются транзакция в серверном программировании и ключевые моменты управления.
В прошлой статье разбираются анонимная процедура, вызов этой процедуры, преимущества и ограничения.
Презентация и исходники доступны по ссылке.
Транзакции
Управлять транзакциями (begin, commit, rollback, savepoint) можно только в процедурах (в т.ч. анонимных).
Процедура как и функция выполняется в атомарной транзакции, но в процедуре возможно завершить текущую транзакцию (commit/rollback) и автоматически начнётся новая.
Также можно сохранить текущие изменения (savepoint), чтобы при определенных обстоятельствах можно было вернуться на эту сохраненную точку. Также можно обрабатывать ошибки и строить кастомную логику, основанную на цепочке транзакций.
Вложенных транзакций в PostgreSQL, к сожалению, нет.
Особенности реализации
Ключевые моменты управления транзакциями:
- Используйте SAVEPOINT для гранулярного контроля
- Обрабатывайте ошибки на разных уровнях
- Минимизируйте время блокировок
- Документируйте поведение транзакций в процедурах
Процедуры с транзакциями идеальны для:
- Сложных бизнес-процессов
- Операций, требующих атомарности
- Систем с высокими требованиями к целостности данных
- Распределенных операций
Пример кода:
-- Автоматическое управление транзакциями:
CREATE OR REPLACE PROCEDURE automatic_transaction_example()
AS $$
BEGIN
-- Начало транзакции (неявно)
INSERT INTO accounts (id, balance) VALUES (1, 1000);
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- Если все успешно - COMMIT
-- Если ошибка - ROLLBACK
END;
$$ LANGUAGE plpgsql;
Больше примеров доступно на гитхабе и в видео.
В следующей статье мы разберём транзакции в серверном программировании.
Добавить комментарий