72 похожих чатов

Если из таблицы постгреса с колонками id, name, salary выполнить

в режиме REPEATABLE READ запрос select sum(salary) where name = "bob", то до завершения транзакции ведь должны забронироваться строки со всеми id у которых name= "bob"?

22 ответов

9 просмотров

Нет, не должно

Чтобы заблокировать надо делать Select... For update...

RAFIZ- Автор вопроса
Ilya Zviagin
Нет, не должно

похоже на то, действительно а на что тогда уровень REPEATABLE READ влияет? если его явно указать

RAFIZ
похоже на то, действительно а на что тогда уровен...

Прочитайте лучше документацию (лучше всего — всю главу): https://www.postgresql.org/docs/current/mvcc.html

RAFIZ
похоже на то, действительно а на что тогда уровен...

На изоляцию транзакций. Причём он же скорее всего и работает по умолчанию если ничего не указывал

RAFIZ- Автор вопроса
Ilya Zviagin
На изоляцию транзакций. Причём он же скорее всего...

так блокировка строк о которой я спрашивал - и есть изоляция (способ её достижения)

RAFIZ
так блокировка строк о которой я спрашивал - и ест...

Безусловно. Но средство и еë цель это не одно и то же

RAFIZ- Автор вопроса
Ilya Zviagin
На изоляцию транзакций. Причём он же скорее всего...

ну в чем это выражается тогда? если не в том что я написал в изначальном вопросе

Вот начальный вопрос. Что тут выражается?

RAFIZ- Автор вопроса
Ilya Zviagin
Вот начальный вопрос. Что тут выражается?

там предполагается а тут в чём выражается эта изоляция?

RAFIZ
там предполагается а тут в чём выражается эта изол...

А читать документацию Вы принципиально отказываетесь или как (описания лучше, чем там, Вы нигде не найдёте)? Может, Вы ожидаете, что кто-то сюда процитирует весь соответствующий раздел? ;)

RAFIZ- Автор вопроса
Yaroslav Schekin
А читать документацию Вы принципиально отказываете...

наверное, раз сюда пришёл, то прочитал её и не пары моментов:) что и принёс

> на что тогда уровень REPEATABLE READ влияет? Таки придётся цитировать, да? ;) Влияние (отличие от RC) номер раз: The Repeatable Read isolation level only sees data committed before the transaction began; it never sees either uncommitted data or changes committed during transaction execution by concurrent transactions. This level is different from Read Committed in that a query in a repeatable read transaction sees a snapshot as of the start of the first non-transaction-control statement in the transaction, not as of the start of the current statement within the transaction. Thus, successive SELECT commands within a single transaction see the same data, i.e., they do not see changes made by other transactions that committed after their own transaction started. Влияние (отличие от RC) номер два: Applications using this level must be prepared to retry transactions due to serialization failures. UPDATE, DELETE, MERGE, SELECT FOR UPDATE, and SELECT FOR SHARE commands behave the same as SELECT in terms of searching for target rows: they will only find target rows that were committed as of the transaction start time. However, such a target row might have already been updated (or deleted or locked) by another concurrent transaction by the time it is found. In this case, the repeatable read transaction will wait for the first updating transaction to commit or roll back (if it is still in progress). If the first updater rolls back, then its effects are negated and the repeatable read transaction can proceed with updating the originally found row. But if the first updater commits (and actually updated or deleted the row, not just locked it) then the repeatable read transaction will be rolled back with the message ERROR: could not serialize access due to concurrent update because a repeatable read transaction cannot modify or lock rows changed by other transactions after the repeatable read transaction began. Что тут конкретно непонятно?

RAFIZ- Автор вопроса
Yaroslav Schekin
> на что тогда уровень REPEATABLE READ влияет? Та...

читал их. и оба они не объясняют то, почему строки после первого удачного SELECT-а не блочатся, а противоречат

RAFIZ
читал их. и оба они не объясняют то, почему строки...

Я не понимаю, что Вы пишете. :( В PostgreSQL (речь только об обычных DML — INSERT/UPDATE/DELETE) писатели никогда не блокируют читателей, а читатели никогда не блокируют писателей. Никаких "настоящих" (которые могут привести к блокировкам) locks при чтении ни на одном уровне изоляции PostgreSQL не накладывает. > а противоречат Чему это они "противоречат", как Вам удалось так прочитать процитированное?!

RAFIZ- Автор вопроса
Yaroslav Schekin
Я не понимаю, что Вы пишете. :( В PostgreSQL (реч...

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

> внимательно прочитал. а вы? Прочитали что именно? > то второй селект должен получить ошибку Ничего подобного. Опять-таки, как из написанного @MasterZiv правильного ответа Вам удалось сделать противоположный вывод?!

RAFIZ- Автор вопроса
Yaroslav Schekin
> внимательно прочитал. а вы? Прочитали что именн...

вывод сделан на основе второго отличия из вашей цитаты доки

RAFIZ
вывод сделан на основе второго отличия из вашей ци...

Опять-таки, это Вам как удалось? ;) Там написано про конфликт писателей... послушайте, есть же перевод этой документации (не знаю, правда, насколько качественный) — может, там Вам будет понятнее? https://postgrespro.ru/docs/enterprise/15/transaction-iso#XACT-REPEATABLE-READ

RAFIZ- Автор вопроса
Yaroslav Schekin
Опять-таки, это Вам как удалось? ;) Там написано п...

спасибо, прочитаю её хотя в оригинале вроде всё воспринимаю:) я понимаю что читатели не блокируют писателей, а запрос с двойным селектом это как раз читатель. просто я ожидал что уровень REPEATABLE read предполагает констистентность всех селектов, а для этого конкурентному апдейту, сующемуся между ними придётся подождать это, видимо, не так?

RAFIZ
спасибо, прочитаю её хотя в оригинале вроде всё во...

> просто я предполагал уровень REPEATABLE read предполагает констистентность всех селектов Эээ... что вообще такое "констистентность"?! Если Вы думаете, что у этого понятия есть однозначное общепринятое определение, то зря. ;( Если Вы имеете в виду "Repeatable Read isolation level only sees data committed before the transaction began" — то да, так оно и есть, документация не врёт. > а для этого апдейту, сующемуся между ними придётся подождать Разумеется, нет. "Писатели никогда не блокируют читателей, а читатели никогда не блокируют писателей" справедливо всегда — это не преувеличение, а твёрдый принцип (гарантия) в PostgreSQL. Как мне ещё это написать? ;) Вот оно же из документации: "The main advantage of using the MVCC model of concurrency control rather than locking is that in MVCC locks acquired for querying (reading) data do not conflict with locks acquired for writing data, and so reading never blocks writing and writing never blocks reading. PostgreSQL maintains this guarantee even when providing the strictest level of transaction isolation through the use of an innovative Serializable Snapshot Isolation (SSI) level."

Похожие вопросы

Обсуждают сегодня

Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
Добрый день. Созданию отношения таблиц для учёта кораблей, их движения между точками (портами) согласно расписания. Терзают сомнения в правильном ли направлении двигаюсь 😅 1...
Aleksey
1
у меня такой вопрос про память в x86 возник, может кто пояснить?.. у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше)...
Toideng
10
Привет. Наверняка у кого-нибудь здесь есть опыт работы с трекерами (встроенными в OpenCV (KCF) или абстрагированными) на одноплатниках. Если не рассматривать малинку и други...
Georgy Makarov
4
Всем привет, Добавил в плагин определение user agent public function registerMarkupTags() { return [ 'filters' => [ 'staticPage' => ['RainLab\Pages\Cl...
John Norton Kruger
3
А чего при переходе с 2 на 3 все что в билдере сделано тютю?
Денис Александрович
5
И всё-таки спрошу насчет такого вариант, сомнительно или нет? (Windows стоять не будет)
Georgy Makarov
5
Я колись ставив гуглу антиспам 3.0, може і норм, але мені не дуже зайшло. Теж думав тиждень, що його і куди. Зупинився на трех варіантах відразу всі три і включив 1. Перевір...
𝓔𝓾𝓰𝓮𝓷𝓮𝓥 J
2
Приветствую. Есть N видео объектов (фильмы). Часть полной длины просмотра а часть короткие ( обрезаны титры). Задача найти идентичные фильмы. Я не в курсе, есть ли аналог шаз...
Nikolay Chudinov
7
У них там что-то своё же вроде!?
Евгений Данилов
5
Карта сайта