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

Всем привет - ребят не могу воспроизвести ситуацию с LOST

updates ни на каком уровне изоляции в PostgreSQL - скажите получается такую ситуацию нельзя наблюдать для PostgreSQL и именно поэтому в доке ничего про это не сказано?

16 ответов

34 просмотра

Так а с чего ты взял, что LOST UPDATE возможен в PG? Его везде извели уже давно, на сколько я знаю, а был он лишь в InterBase

в PG update должен накладывать блокировку на изменяемые записи, так что lost update не будет возможен.

Boris- Автор вопроса
Ilya Zviagin
в PG update должен накладывать блокировку на измен...

ок понял спасибо, странно что в доке упомянут только dirty read как тот феномен который не воспроизводится ни на каком уровне изоляции

Какой именно тип lost updates? Если то, что описывается в ISO SQL, то там ясно сказано "The four isolation levels guarantee that each SQL-transaction will be executed completely or not at all, and that no updates will be lost." Т.е. любую RDBMS, которая врёт утверждает, что она ACID, и допускает lost update на любом из стандартных уровней изоляции, можете смело выкинуть в окно. :) А под lost update в разных местах понимают следующее: 1. A lost update is considered to have taken place when data that has been updated by one transaction is overwritten by another transaction, BEFORE the first transaction is either committed or rolled back. 2. A lost update is when one transaction (Transaction #1) reads data into its local memory, and then another transaction (Transaction #2) changes this data and commits its change. After this, Transaction #1 updates the same data based on what it read into memory before Transaction #2 was executed. In this case, the update performed by Transaction #2 can be considered a lost update. ISO SQL запрещает именно и только первый.

Boris
ок понял спасибо, странно что в доке упомянут толь...

LOST UPDATE (его феномена) на сколько я помню, нет в ANSI-стандарте, поэтому и нет (видимо) смысла об этом упоминать в документации.

Ilya Zviagin
LOST UPDATE (его феномена) на сколько я помню, нет...

Он там упомянут, и запрещается всегда, независимо от уровня изоляции. Так что про него ничего и не пишут, обычно...

Boris
а 2 запрещен ANSI SQL?

Нет, написал же уже. ;)

Boris
а 2 запрещен ANSI SQL?

Ну, как запрещён? Ты этого можешь добиться. Причём -- в любой СУБД

Boris- Автор вопроса
Ilya Zviagin
Ну, как запрещён? Ты этого можешь добиться. Причём...

да я понял это не нарушение гарантий базы

Boris- Автор вопроса
Ilya Zviagin
Ну, как запрещён? Ты этого можешь добиться. Причём...

однако в случае если поставить REPEATABLE READ - не будет воспроизводиться

Boris- Автор вопроса
Ilya Zviagin
будет

только что тестил - получил ERROR: could not serialize access due to concurrent update как и написано в доке

Boris
только что тестил - получил ERROR: could not seri...

Ну значит pg это вообще явно ловит и не дает

Boris
только что тестил - получил ERROR: could not seri...

Это в PostgreSQL, конкретно. Никто не запрещает другим СУБД вести себя иначе в отношении феноменов, не упомянутых в стандарте. Поэтому, IMNSHO, "заморачиваться" феноменами никакого смыла нет. Я к тому, что Вы либо используете SERIALIZABLE и Вам всё равно (никаких феноменов нет, независимо от реализации, если она корректная), либо Вам нужно знать механизмы реализации изоляции для используемых уровней изоляции в конкретной СУБД для того, чтобы написать надёжный код (и "феномены" Вам не помогут).

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

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

Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
14
Карта сайта