Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как сделать select и одновременно update заселекченых строк? / 9 сообщений из 9, страница 1 из 1
04.01.2017, 08:26
    #39379417
kkv79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сделать select и одновременно update заселекченых строк?
есть таблица с данными и несколько клиентов.
клиенты делают select * from table where "обработано" isnull limit 10;
как сделать, чтоб клиенты не заселектили одни и те же строки?
ну т.е. каким то образом нужно заапдэйтить заселекченые строки в одной транзакции.
хелп...
...
Рейтинг: 0 / 0
04.01.2017, 10:55
    #39379434
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сделать select и одновременно update заселекченых строк?
...
Рейтинг: 0 / 0
04.01.2017, 11:14
    #39379437
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сделать select и одновременно update заселекченых строк?
Либо вместо select и последующего update сделать напрямую update .... returning
...
Рейтинг: 0 / 0
05.01.2017, 02:51
    #39379627
kkv79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сделать select и одновременно update заселекченых строк?
Melkij,

returning не то, он только для одной строки работает.
...
Рейтинг: 0 / 0
05.01.2017, 02:51
    #39379628
kkv79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сделать select и одновременно update заселекченых строк?
vyegorov,

спасибо, то что нужно!
...
Рейтинг: 0 / 0
05.01.2017, 10:43
    #39379660
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сделать select и одновременно update заселекченых строк?
[quot kkv79returning не то, он только для одной строки работает.[/quot]
Поясните, ибо я другого мнения.
...
Рейтинг: 0 / 0
06.01.2017, 19:10
    #39380168
Sergei.Agalakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сделать select и одновременно update заселекченых строк?
MelkijЛибо вместо select и последующего update сделать напрямую update .... returning
Нельзя. Вторая сессия будет ждать коммита первой, а потом обновит уже обновленные записи.
SKIP LOCKED - очень правильная фича.
...
Рейтинг: 0 / 0
06.01.2017, 19:28
    #39380171
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сделать select и одновременно update заселекченых строк?
Sergei.Agalakov,

Ваше утверждение применимо и к `FOR UPDATE SKIP LOCKED` — как только данная транзакция зафиксируется, любая другая может изменить эти записи.
В случае с `UPDATE RETURNING` будут возвращены только те записи, которые были изменены. И да, после фиксации данные и в этом случае могут быть изменены любой другой транзакцией.
...
Рейтинг: 0 / 0
06.01.2017, 20:19
    #39380183
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сделать select и одновременно update заселекченых строк?
Sergei.Agalakov,

а никто не спорит, что skip locked штука полезная.
Вопрос: а что ещё надо сделать именно в этой транзакции. Если только проставить статус "в работе" - т.к. нужно сделать медленный вызов внешнего апи - то одного returning без skip locked достаточно.

Или дёрнуть обоих:
Код: sql
1.
2.
3.
update tablename set   ....
where pk in (select pk  from tablename where ... for update skip locked)
returning ...


Что избавляет приложение от необходимости строить update.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / как сделать select и одновременно update заселекченых строк? / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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