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