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

Когда останавливаешь работу да, а когда работу не хочешь останавливать?

4 ответов

17 просмотров

Транзакции с обновлением всей таблицы или всех строк в таблице берут соответствующие блокировки, и другие сессии, которые пытаются изменить те же строки, не смогут этого сделать, пока блокирующая их транзакция не завершится. Получите простой, от которого хотели избавиться. Обычно как раз массовые обновления желают пачками, чтобы таких блокировок было меньше. Либо триггеры, которые работают в транзакциях, порожденных приложением. Истории с миграциями без простоя в работе самого приложения вообще сложный вопрос, и транзакциями он не решается. Плюс использование транзакций не означает автоматически, что бэкап не нужен. Транзакцию можно закоммитить, и выявить проблемы с результатом уже после. И не уже не откатить, если заранее не позаботиться об этом. Если нужно быстрое переключение на версию БД до миграции, есть hot standby реплики, ну или край механизмы snapshot, если их поддерживает СУБД.

Artyom-Denezhny Автор вопроса
Максим Мартынов
Транзакции с обновлением всей таблицы или всех стр...

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

Artyom Denezhny
давай не уходить в дебри, есть блокировки на уровн...

Есть разные типы блокировок, но обе описанные не дают другим сессиям обновлять строки, на которые взята блокировка. Если таких строк много, приложение превращается в read only витрину, а при попытке обновления запрос висит и ждёт, пока блокировка не будет снята (ну или сразу падает, зависит от запроса). https://habr.com/ru/companies/postgrespro/articles/463819/ https://habr.com/ru/companies/postgrespro/articles/462877/

Я отвечал на вот это

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта