powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Альтернатива SELECT FOR UPDATE NOWAIT
5 сообщений из 5, страница 1 из 1
Альтернатива SELECT FOR UPDATE NOWAIT
    #38865527
rupchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На уровне приложения надо чтобы только один пользователь мог открыть для редактирования комплексный объект из базы (например, документ). Т.е. нужна блокировка, которая другим будет сигнализировать что объект заблокирован. Сейчас это сделано через SELECT FOR UPDATE NOWAIT. Вопрос - есть ли другие инструменты или подход для реализации того же на постгресе.
...
Рейтинг: 0 / 0
Альтернатива SELECT FOR UPDATE NOWAIT
    #38865573
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rupchikНа уровне приложения надо чтобы только один пользователь мог открыть для редактирования комплексный объект из базы (например, документ). Т.е. нужна блокировка, которая другим будет сигнализировать что объект заблокирован. Сейчас это сделано через SELECT FOR UPDATE NOWAIT. Вопрос - есть ли другие инструменты или подход для реализации того же на постгресе.

для начала обьясните чем вас неустраивает select for update nowait?
а так еще можно в сторону advisory locks посмотреть они зачастую удобнее
( http://www.postgresql.org/docs/9.4/static/explicit-locking.html#ADVISORY-LOCKS)


--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Альтернатива SELECT FOR UPDATE NOWAIT
    #38865603
rupchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Эдвайзери лок были рассмотрены еще до for update, спасибо. Вопрос возник в следующем контексте. Сейчас приложение работает через select for update в read commited transactions. Некоторые части будут переписаны на serializable transactions. Поэтому интересно, возможно есть другая техника с учетом serializable без явного for update.
...
Рейтинг: 0 / 0
Альтернатива SELECT FOR UPDATE NOWAIT
    #38865648
этта
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rupchik,

в случае, если "забор" объекта -- лишь логический (длинная транзакция не открывается) -- есть техника "логической блокировки" ("забора" какого-нибудь уникъю ресурса, например фиксация id объекта в журнале забранных на обработку объектов). Поскольку такие "блокировки" объявляются внетранзакционно, обычно выставляется дефолтное время, за которое забравший должен "вернуть" помеченное в общее пользование. И если кто-то перебьёт [после истечения этого времени] заявку первого -- первому придёт сообщение "увы, вы опоздали". Это возможно, когда все части объекта меняются "через одно место" (в т.ч. -- выставляющее такую "блокировку"). Если это не так -- то от select for update [|nowait]всех частей объекта -- не уйти.


ЗЫ а что сразу сериалайзебл ? репитбл рид тоже хороший уровень изоляции. Я даже немного пользовался, пока не появилась возможность свести алгоритм к совместимому с рид коммитед варианту.
...
Рейтинг: 0 / 0
Альтернатива SELECT FOR UPDATE NOWAIT
    #38865699
rupchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
этта,

ясно, спасибо.

з.ы. алгоритм требует сериэлайзбл - агрегировать столбец на момент времени и по результату принять решение какие новые записи сделать (в этой же таблице), которые, в свою очередь, влияют на результат агрегирования.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Альтернатива SELECT FOR UPDATE NOWAIT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]