45.9. УпÑавление ÑÑанзакÑиÑми
РпÑоÑедÑÑе, коÑоÑÐ°Ñ Ð²ÑзÑваеÑÑÑ Ð² коде веÑÑ
него ÑÑÐ¾Ð²Ð½Ñ Ð¸Ð»Ð¸ в анонимном блоке кода (в команде DO), можно ÑпÑавлÑÑÑ ÑÑанзакÑиÑми. ЧÑÐ¾Ð±Ñ Ð·Ð°ÑикÑиÑоваÑÑ ÑекÑÑÑÑ ÑÑанзакÑиÑ, вÑзовиÑе plpy.commit(), а ÑÑÐ¾Ð±Ñ Ð¾ÑкаÑиÑÑ â plpy.rollback(). (ÐамеÑÑÑе, ÑÑо вÑполниÑÑ SQL-ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ COMMIT или ROLLBACK ÑеÑез plpy.execute или подобнÑÑ ÑÑнкÑÐ¸Ñ Ð½ÐµÐ»ÑзÑ. СооÑвеÑÑÑвÑÑÑие опеÑаÑии могÑÑ Ð²ÑполнÑÑÑÑÑ ÑолÑко даннÑми ÑÑнкÑиÑми.) ÐоÑле завеÑÑÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑанзакÑии ÑледÑÑÑÐ°Ñ Ð½Ð°ÑинаеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки, оÑделÑной ÑÑнкÑии Ð´Ð»Ñ ÑÑого неÑ.
ÐÑимеÑ:
CREATE PROCEDURE transaction_test1()
LANGUAGE plpythonu
AS $$
for i in range(0, 10):
plpy.execute("INSERT INTO test1 (a) VALUES (%d)" % i)
if i % 2 == 0:
plpy.commit()
else:
plpy.rollback()
$$;
CALL transaction_test1();ТÑанзакÑÐ¸Ñ Ð½ÐµÐ»ÑÐ·Ñ Ð·Ð°Ð²ÐµÑÑиÑÑ Ð² ÑлÑÑае ÑÑÑеÑÑÐ²Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾ÑкÑÑÑой Ñвной подÑÑанзакÑии.