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 позволяет его опускать.