RELEASE SAVEPOINT
RELEASE SAVEPOINT â вÑÑвободиÑÑ Ñанее опÑеделÑннÑÑ ÑоÑÐºÑ ÑÐ¾Ñ ÑанениÑ
СинÑакÑиÑ
RELEASE [ SAVEPOINT ] имÑ_ÑоÑки_ÑоÑ
ÑанениÑÐпиÑание
Ðоманда RELEASE SAVEPOINT оÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ ÑказаннÑÑ ÑоÑÐºÑ ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸ вÑе акÑивнÑе ÑоÑки ÑоÑ
ÑанениÑ, ÑозданнÑе поÑле Ñказанной, а Ñакже оÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ ÑооÑвеÑÑÑвÑÑÑие ÑеÑÑÑÑÑ. ÐÑе изменениÑ, ÑделаннÑе Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑоÑки ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ (но не оÑменÑннÑе), обÑединÑÑÑÑÑ Ð² ÑÑанзакÑÐ¸Ñ Ð¸Ð»Ð¸ в ÑоÑÐºÑ ÑоÑ
ÑанениÑ, акÑивнÑÑ Ð½Ð° Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñказанной ÑоÑки ÑоÑ
ÑанениÑ. ÐзменениÑ, ÑделаннÑе поÑле RELEASE SAVEPOINT, Ñакже вклÑÑаÑÑÑÑ Ð² акÑивнÑÑ ÑÑанзакÑÐ¸Ñ Ð¸Ð»Ð¸ ÑоÑÐºÑ ÑоÑ
ÑанениÑ.
ÐаÑамеÑÑÑ
имÑ_ÑоÑки_ÑÐ¾Ñ ÑанениÑÐÐ¼Ñ ÑоÑки ÑÐ¾Ñ ÑанениÑ, подлежаÑей оÑвобождениÑ.
ÐÑимеÑаниÑ
Указание имени ÑоÑки ÑÐ¾Ñ ÑанениÑ, не опÑеделÑнной Ñанее, ÑÑиÑаеÑÑÑ Ð¾Ñибкой.
ÐÑвободиÑÑ ÑоÑÐºÑ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð² ÑÑанзакÑии, Ð½Ð°Ñ Ð¾Ð´ÑÑейÑÑ Ð² пÑеÑванном ÑоÑÑоÑнии, можно ÑолÑко пÑи помоÑи ROLLBACK TO 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))); -- вÑдаÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð ÑÑом пÑимеÑе пÑиложение запÑаÑÐ¸Ð²Ð°ÐµÑ Ð¾Ñвобождение ÑоÑки ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ sp2, добавивÑей 3. ÐÑи ÑÑом конÑекÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑей ÑÑанзакÑии измениÑÑÑ Ð½Ð° sp1. Ðогда опеÑаÑоÑ, добавлÑÑÑий 4, вÑдаÑÑ Ð¾ÑибкÑ, добавление знаÑений 2 и 4 бÑÐ´ÐµÑ Ð¿Ð¾ÑеÑÑно, поÑколÑÐºÑ Ð¾Ð½Ð¸ вÑ
одÑÑ Ð² оÑменÑннÑÑ ÑоÑÐºÑ ÑоÑ
ÑанениÑ, а знаÑение 3 наÑ
одиÑÑÑ Ð² Ñом же ÑÑанзакÑионном конÑекÑÑе. ÐоÑколÑÐºÑ Ð¾ÑÑалÑнÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¸Ð³Ð½Ð¾ÑиÑÑÑÑÑÑ, пÑиложение Ð¼Ð¾Ð¶ÐµÑ Ð²ÑбÑаÑÑ ÑолÑко Ð¾Ð´Ð½Ñ Ð¸Ð· ÑледÑÑÑиÑ
двÑÑ
команд:
ROLLBACK; ROLLBACK TO SAVEPOINT sp1;
ÐÑи вÑбоÑе ROLLBACK вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð¾ÑмененÑ, вклÑÑÐ°Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ знаÑÐµÐ½Ð¸Ñ 1, а пÑи вÑбоÑе ROLLBACK TO SAVEPOINT sp1 знаÑение 1 ÑоÑ
ÑаниÑÑÑ, и вÑполнение ÑÑанзакÑии пÑодолжиÑÑÑ.
СовмеÑÑимоÑÑÑ
ÐÑа команда ÑооÑвеÑÑÑвÑÐµÑ ÑÑандаÑÑÑ SQL. Ð ÑÑандаÑÑе говоÑиÑÑÑ, ÑÑо клÑÑевое Ñлово SAVEPOINT ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм, но Postgres Pro позволÑÐµÑ Ð¾Ð¿ÑÑкаÑÑ ÐµÐ³Ð¾.