SAVEPOINT
Эта страница переведена при помощи нейросети GigaChat.
SAVEPOINT
- создание новой точки сохранения внутри текущей транзакции.
Синтаксис
SAVEPOINT savepoint_name
Описание
SAVEPOINT
создает новую точку сохранения внутри текущей транзакции.
Точка сохранения — это специальная метка внутри транзакции, к которой можно откатиться, отменив все команды, выполненные после ее создания, и восстановив состояние транзакции на тот момент.
Параметры
savepoint_name
- Имя новой точки сохранения. Если в транзакции уже существуют точки сохранения с таким именем, они становятся недоступными, пока не будет удалена новая точка с тем же именем.
Примечания
Используйте ROLLBACK TO SAVEPOINT, чтобы откатиться к точке сохранения.
Чтобы удалить точку сохранения, но сохранить изменения, выполненные после нее — используйте RELEASE SAVEPOINT.
Точки сохранения можно создавать только внутри транзакционного блока (BEGIN ... COMMIT/ROLLBACK
). В одной транзакции может быть несколько точек сохранения.
Примеры
Установление точки сохранения и затем отмена действия всех команд, выполненных после установленной точки:
BEGIN;
INSERT INTO table1 VALUES (1);
SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (2);
ROLLBACK TO SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (3);
COMMIT;
Вышеупомянутая транзакция вставит значения 1 и 3, но не 2.
Создание и удаление точки сохранения:
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 my_savepoint;
INSERT INTO table1 VALUES (2);
SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (3);
-- rollback to the second savepoint
ROLLBACK TO SAVEPOINT my_savepoint;
SELECT * FROM table1; -- shows rows 1 and 2
-- release the second savepoint
RELEASE SAVEPOINT my_savepoint;
-- rollback to the first savepoint
ROLLBACK TO SAVEPOINT my_savepoint;
SELECT * FROM table1; -- shows only row 1
COMMIT;
Вышеупомянутая транзакция показывает, что сначала откатывается строка 3, затем строка 2.
Совместимость
По стандарту SQL, если создать новую точку сохранения с уже существующим именем, старая должна быть автоматически удалена. В PostgreSQL поведение другое: старая точка сохраняется, но становится временно недоступной. При выполнении ROLLBACK TO SAVEPOINT
или RELEASE SAVEPOINT
будет использоваться только последняя из точек с таким именем. Если удалить последнюю точку с этим именем (RELEASE SAVEPOINT
), то предыдущая снова станет доступной. В остальном команда полностью соответствует стандарту SQL.
Смотрите также
BEGIN, COMMIT, RELEASE SAVEPOINT, ROLLBACK, ROLLBACK TO SAVEPOINT