В чем смысл отката в PostgreSql и когда его использовать? - PullRequest
0 голосов
/ 05 мая 2020

Что означает откат в PostgreSql и когда его использовать?

Насколько я понимаю, если кто-то совершает какую-то транзакцию, то с помощью отката он / она может быть уверен, что эта транзакция будет откат (не произойдет).
Описание из официальной документации: «Описание. ROLLBACK откатывает текущую транзакцию и отменяет все обновления, сделанные транзакцией».

Теперь я не понять, почему кто-то захочет написать транзакцию, а затем неявно настаивает на ее завершении?
Мне кажется, что никто не должен использовать откат, и вместо этого они должны придерживаться фиксации, потому что фиксация позволяет транзакции произойти, если она верна и прекратить в противном случае.

1 Ответ

2 голосов
/ 05 мая 2020

Транзакция может состоять из нескольких операторов базы данных, и код приложения может чередоваться.

Представьте себе простой денежный перевод:

START TRANSACTION;
SELECT amount FROM account WHERE account_nr = 432 FOR UPDATE;
/* do some calculation in the application */
UPDATE account SET amount = 543.23 WHERE account_nr = 432;
SELECT amount FROM account WHERE account_nr = 123 FOR UPDATE;
/* do another calculation in the application */
UPDATE account SET amount = 1903.4 WHERE account_nr = 123;
COMMIT;

Теперь в любой момент вы можете столкнуться с проблемой , например:

  • Второй оператор SELECT может не вернуть результат, потому что такой учетной записи нет.
  • Второй UPDATE может завершиться ошибкой, потому что он нарушает базу данных ограничение.
  • Второе вычисление в приложении может вызвать состояние ошибки.

Если что-то подобное произойдет, вам необходимо прервать транзакцию и отменить ее работу. Например, вы не можете позволить изменениям в учетной записи 432 стать видимыми.

Правильный способ сделать это в реляционной базе данных - выдать ROLLBACK, тогда все это произойдет автоматически.

Транзакции - это услуга, позволяющая пользователю легко писать надежный и устойчивый код.

...