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

Всем привет. Задался таким вопросом. Нужно заблокировать 2 таблицы для обновления: Сделал

так:
perform 1 from table1 t1 join table2 t2 on t2.foreign_id = t1.id order by t1.id for update

Но на сколько я понимаю, такая блокировка не очень хорошая(джоин 2 таблицы)? Как можно сделать лучше ?

7 ответов

24 просмотра
Егор-miruzzy Автор вопроса

@Yaroslav_Schekin , не подскажешь случаем ? :)

Выбросить это всё целиком (т.е. мой ответ — "нет, на самом деле не нужно Вам ничего блокировать" [это почти наверняка так]), и пересмотреть решение (или рассказать здесь, в чём на самом деле состоит задача, а не спрашивать, как заставить работать какие-то "костыли"). ;)

Егор-miruzzy Автор вопроса
Yaroslav Schekin
Выбросить это всё целиком (т.е. мой ответ — "нет, ...

не, там как раз такое решение и вышло Там пакетные обновления и они из разных подсистем ( разные кроны/сервисы) Всё решалось вот так: for X in select from table1 order by id loop -- тут обработка обновления end loop И всё было крисиво, дедлоки убрались. Но тут потребовалось этот цикл сортировать в другом порядке Принял решение - перед циклом сделать блокировку. Но вот такое решение ( from join for update ) - не очень хорошее

Егор miruzzy
не, там как раз такое решение и вышло Там пакетны...

> там как раз такое решение и вышло Вы опять описываете решение неизвестной проблемы. :( > И всё было крисиво, дедлоки убрались. А зачем вообще было убирать deadlocks? > Но тут потребовалось этот цикл сортировать в другом порядке И при сортировке в другом порядке (главное, в одном во всех запросах) свойство "дедлоки убрались" почти всегда сохраняется. Т.е. зачем блокировать-то что-то? > Принял решение - перед циклом сделать блокировку. Лучше бы Вы приняли решение описать задачу. ;( Ладно, если уж хотите из пушки по воробьям — вот Вам https://www.postgresql.org/docs/current/sql-lock.html ...

Егор-miruzzy Автор вопроса
Yaroslav Schekin
> там как раз такое решение и вышло Вы опять опис...

статья - лок таблицы, я же за лок на уровне строк Если описывать всю проблему и как что устроено - не хватит и 1к символов :) Ладно, буду искать оптимальное решение

Егор miruzzy
статья - лок таблицы, я же за лок на уровне строк ...

Вы просили лок таблицы — вам показали лок таблицы.

Егор miruzzy
статья - лок таблицы, я же за лок на уровне строк ...

> Нужно заблокировать 2 таблицы для обновления: А кто написал вот это, а (из вопроса не понятно, что речь про rows)? ;) Без описания того, зачем Вам это нужно, ответы и будут примерно такие. > Ладно, буду искать оптимальное решение Тем не менее, FOR [NO KEY] UPDATE блокирует все выбранные rows всех таблиц в запросе... что с ним не так-то? Для конкретного указания, в каких таблицах блокировать, есть FOR lock_strength [ OF table_name [, ...] ], кстати.

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
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
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
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
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта