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