Перейти к основному содержимому

RELEASE SAVEPOINT

примечание

Эта страница переведена при помощи нейросети GigaChat.

RELEASE SAVEPOINT - удаление ранее созданной точки сохранения.

Синтаксис

RELEASE [ SAVEPOINT ] savepoint_name

Описание

RELEASE SAVEPOINT освобождает указанную точку сохранения и все активные точки сохранения, созданные после указанной точки сохранения, освобождая их ресурсы. Все изменения, сделанные со времени создания этой точки сохранения, которые еще не были отменены, объединяются в транзакцию или точку сохранения, которая была активной при создании данной точки сохранения. Изменения, внесенные после RELEASE SAVEPOINT, также будут частью этой активной транзакции или точки сохранения.

Параметры

savepoint_name
Точка сохранения, которая должна быть освобождена.

Примечания

Указание имени точки сохранения, которая не была создана ранее, приведет к ошибке.

Освободить точку сохранения в транзакции, находящейся в прерванном состоянии, можно только при помощи ROLLBACK TO SAVEPOINT.

Если было создано несколько точек сохранения с одинаковым именем, то команда удалит только самый последний. Повторные вызовы RELEASE SAVEPOINT будут удалять последовательно более старые точки с тем же именем.

Примеры

Создание и освобождение точки сохранения:

BEGIN;
INSERT INTO table1 VALUES (3);
SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (4);
RELEASE SAVEPOINT my_savepoint;
COMMIT;

Данная транзакция вставит значения 3 и 4.

Более сложный пример с несколькими вложенными подтранзакциями:

BEGIN;
INSERT INTO table1 VALUES (1);
SAVEPOINT sp1;
INSERT INTO table1 VALUES (2);
SAVEPOINT sp2;
INSERT INTO table1 VALUES (3);
RELEASE SAVEPOINT sp2;
INSERT INTO table1 VALUES (4))); -- generates an error

В этом примере приложение запрашивает освобождение точки сохранения sp2, которая вставила значение 3. Это изменяет контекст транзакций вставки на sp1. Когда оператор, пытающийся вставить значение 4, генерирует ошибку, вставленные значения 2 и 4 теряются, так как они находятся в одной и той же точке сохранения, теперь откатанной назад, а значение 3 находится в том же контексте транзакции. Теперь приложению остается выбрать одну из этих двух команд, поскольку все остальные команды будут проигнорированы:

ROLLBACK;
ROLLBACK TO SAVEPOINT sp1;

Выбор ROLLBACK приведет к отмене всего, включая значение 1, тогда как выбор ROLLBACK TO SAVEPOINT sp1 сохранит значение 1 и позволит продолжить транзакцию.

Совместимость

Эта команда соответствует стандарту SQL. Стандарт определяет, что ключевое слово SAVEPOINT является обязательным, но PostgreSQL позволяет его опускать.

Смотрите также

BEGIN, COMMIT, ROLLBACK, ROLLBACK TO SAVEPOINT, SAVEPOINT