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

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

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

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

7 ответов

13 просмотров
Егор-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 [, ...] ], кстати.

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

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

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Добрый день подскажите пожалуйста может кто то сталкивался с ошибками Sentry 22.10.0 развернутым из helm чарт в Kubernetes? Изначально 3 дня назад очень стало много событий ух...
Tire4 Finist Devops
1
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
почому оно не работает?
Vi Chapmann ٩( 💢•̀ з•́)و Chapmann
19
всем привет почти закончил курс После него можно писать свою операционку? Какие библиотеки надо использовать и куда дальше копать для изучения
Linus
19
Так а кто может спарсить всех участников чата? Идишники
Magic
18
Карта сайта