pg.ddx.io  pgsql-docs@postgresql.org mailing list archive  
help / color / mirror / Atom feed
 Некорректное пояснение к примеру в разделе 13.2.1
2+ messages / 2 participants
[nested] [flat]

*  Некорректное пояснение к примеру в разделе 13.2.1
@ 2018-06-27 05:05  Алексей Снытко <asnytko.krk@gmail.com>
  0 siblings, 1 reply; 2+ messages in thread

From: Алексей Снытко @ 2018-06-27 05:05 UTC (permalink / raw)
  To: pgsql-docs

 Добрый день!

Документация к PostgreSQL 9.5 - 10, раздел 13.2.1 "Уровень изоляции Read
Committed".

В данном разделе приведен пример с таблицей website, после него следует
объяснение логики выполнения:

*"Команда DELETE не сделает ничего, даже несмотря на то, что строка с
website.hits = 10 была в таблице и до, и после выполнения UPDATE. Это
происходит потому, что строка со значением 9 до изменения пропускается, а
когда команда UPDATE завершается и DELETE получает освободившуюся
блокировку, строка с 10 теперь содержит 11, а это значение уже не
соответствует условию"*

Это не соответствует описанию логики уровня изоляции Read Committed,
который приведен выше:

*"Однако SELECT видит результаты изменений, внесённых ранее в этой же
транзакции, даже если они ещё не зафиксированы"*

Если создать таблицу website, состоящую из одного столбца hits, и заполнить
ее двумя строками со значениями 9 и 10, как описано в примере, то при
выполнении транзакции

*BEGIN; *
*UPDATE website SET hits = hits + 1; *
*DELETE FROM website WHERE hits = 10; *
*COMMIT;*

команда DELETE удалит одну из строк таблицы, которая на момент начала
транзакции имела значение 9, а после выполнения команды UPDATE значение 10.
Соответственно, в таблице website должна остаться только одна строка со
значением 10.

Это не ошибка в переводе - документация на английском языке содержит тот же
пример и некорректное пояснение к нему.

-- 
С уважением,
Алексей Снытко


^ permalink  raw  reply  [nested|flat] 2+ messages in thread

* Re: Некорректное пояснение к примеру в разделе 13.2.1
@ 2018-06-27 10:01  Pavel Luzanov <p.luzanov@postgrespro.ru>
  parent: Алексей Снытко <asnytko.krk@gmail.com>
  0 siblings, 0 replies; 2+ messages in thread

From: Pavel Luzanov @ 2018-06-27 10:01 UTC (permalink / raw)
  To: pgsql-docs@lists.postgresql.org

Hello,

First of all, this english language forum.
For questions in Russian you can use 
pgsql-ru-general@lists.postgresql.org list or may be postgres.ru site.

As for your question.

> /BEGIN; /
> /UPDATE website SET hits = hits + 1; /
> /DELETE FROM website WHERE hits = 10; /
> /COMMIT;/
In this example you forget a main part.
DELETE statement must be run in a second session, after UPDATE in first 
session, but before COMMIT.

Look carefully in a documentation:

BEGIN;
UPDATE website SET hits = hits + 1;
-- run from another session:  DELETE FROM website WHERE hits = 10;
COMMIT;


So, example is correct.

-----
Pavel Luzanov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company

^ permalink  raw  reply  [nested|flat] 2+ messages in thread


end of thread, other threads:[~2018-06-27 10:01 UTC | newest]

Thread overview: 2+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2018-06-27 05:05  Некорректное пояснение к примеру в разделе 13.2.1 Алексей Снытко <asnytko.krk@gmail.com>
2018-06-27 10:01 ` Pavel Luzanov <p.luzanov@postgrespro.ru>

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox