[NOVICE] What happens to concurrent update to the same row?

Поиск
Список
Период
Сортировка
От CN
Тема [NOVICE] What happens to concurrent update to the same row?
Дата
Msg-id 1486616316.4014833.875205728.0457435A@webmail.messagingengine.com
обсуждение исходный текст
Ответы Re: [NOVICE] What happens to concurrent update to the same row?  ("David G. Johnston" <david.g.johnston@gmail.com>)
Список pgsql-novice
Let's assume the transaction isolation level is the default "read
committed" and the balance of acnt# 9 is 5 now.

The first transaction does this:

UPDATE accounts SET balance=balance+2 WHERE acnt=9;

The second transaction executes the following command at the same time
when the first transaction is still in progress (not commits yet):

UPDATE accounts SET balance=balance-1 WHERE acnt=9;

Which one of the following scenarios will happen?

1.  PostgreSQL automatically detects this as a conflict and aborts
transaction 2.

2. Transaction 1 automatically locks the target row and therefore blocks
transaction 1. Transaction 2 waits until transaction 1 completes and
then it continues its execution. The result is the correct balance $6.

I propose this scenario (2) because the documentation

https://www.postgresql.org/docs/9.6/static/explicit-locking.html#LOCKING-DEADLOCKS

reads:

"Note that deadlocks can also occur as the result of row-level locks
(and thus, they can occur even if explicit locking is not used)."

Note the words "even if explicit locking is not used".

3. Transaction 1 reads balance $5 and then writes $7. Before transaction
1 commits, transaction 2 reads $5 and writes and commits $4 before
transaction 1. Transaction 1 commits $7, which is the final unexpected
result.

Best Regards,
CN

--
http://www.fastmail.com - IMAP accessible web-mail



В списке pgsql-novice по дате отправления:

Предыдущее
От: "Kranenburg, Roger"
Дата:
Сообщение: [NOVICE] pgAdmin4 1.1 Import Dialog does nothing
Следующее
От: "David G. Johnston"
Дата:
Сообщение: Re: [NOVICE] What happens to concurrent update to the same row?