powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Блокировка записей
15 сообщений из 15, страница 1 из 1
Блокировка записей
    #35279761
Antoxa1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли узнать заблокирована ли запись, запись блокируется вручную
select ... where id = ... for update
можно как нибудь из другой сессии узнать заблокирована ли она?
...
Рейтинг: 0 / 0
Блокировка записей
    #35279770
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antoxa1982Можно ли узнать заблокирована ли запись, запись блокируется вручную
select ... where id = ... for update
можно как нибудь из другой сессии узнать заблокирована ли она?Попробовать заблокировать. Если свалишься с ошибкой, значит заблокирована.
...
Рейтинг: 0 / 0
Блокировка записей
    #35279791
Antoxa1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет не выходит, запрос ставиться в очередь и весит, ждет пока разблокируется запись, ждал около минуты, так и не дождавшись, снял блокировку... Ожидающий запрос (update) выполнился...
А мне надо сразу сообщить что, мол запись заблокирована
...
Рейтинг: 0 / 0
Блокировка записей
    #35279793
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antoxa1982Нет не выходит, запрос ставиться в очередь и весит, ждет пока разблокируется запись, ждал около минуты, так и не дождавшись, снял блокировку... Ожидающий запрос (update) выполнился...
А мне надо сразу сообщить что, мол запись заблокированаПрочитать про NOWAIT
...
Рейтинг: 0 / 0
Блокировка записей
    #35279850
Antoxa1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне не надо таблицу блокировать
Только запись!
...
Рейтинг: 0 / 0
Блокировка записей
    #35279866
Antoxa1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В один момент времени, с одной записью, может работать один пользователь
Если кто то вдруг, захочет изменить эту же запись, надо его послать
Причем запись может быть заблокирована на 1-5 минут
Так что блокировка таблицы здесь не катит
...
Рейтинг: 0 / 0
Блокировка записей
    #35279874
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блокировка записи
Код: plaintext
SELECT ... FOR UPDATE NOWAIT
Ну а для блокировки записи на длительное надо использовать другой подход
...
Рейтинг: 0 / 0
Блокировка записей
    #35279917
Antoxa1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NOWAIT...
Все равно ожидает пока транзакция завершиться...
...
Рейтинг: 0 / 0
Блокировка записей
    #35279924
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antoxa1982NOWAIT...
Все равно ожидает пока транзакция завершиться...
ДокументацияTo prevent the operation from waiting for other transactions to commit, use the NOWAIT optionА это как понимать тогда?
...
Рейтинг: 0 / 0
Блокировка записей
    #35279984
Antoxa1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятия не имею
Говорю же, ждет
Щас вот 2 раза перепроверил по 2 минуты ждал...
как только транзакция завершилась, все запросы выполнились
Мистика...
...
Рейтинг: 0 / 0
Блокировка записей
    #35279999
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должен писать
ERROR: could not obtain lock on row in relation
Схему таблицы и запросы, которые на ней выполняются, напишите в форум.

Код: plaintext
1.
----------------------------
 Verba volent, scripta manent 
...
Рейтинг: 0 / 0
Блокировка записей
    #35280037
Antoxa1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таблица для пробы создана :-)
table1
id, fld1

запрос на блокировку
begin;
select * from table1 where id = 1
FOR update NOWAIT;

запрос на изменение
update table1 set fld1 = 'бла бла бла' where id = 1
...
Рейтинг: 0 / 0
Блокировка записей
    #35280049
Dan Black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antoxa1982таблица для пробы создана :-)
table1
id, fld1

запрос на блокировку
begin;
select * from table1 where id = 1
FOR update NOWAIT;

запрос на изменение
update table1 set fld1 = 'бла бла бла' where id = 1
Код: plaintext
1.
2.
Транзакция  1 
begin;
select * from table1 where id =  1  FOR update NOWAIT;
Код: plaintext
1.
2.
3.
Транзакция  2 
begin;
select * from table1 where id =  1  FOR update NOWAIT;
update table1 set fld1 = 'бла бла бла' where id =  1 ;
...
Рейтинг: 0 / 0
Блокировка записей
    #35280051
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antoxa1982таблица для пробы создана :-)
table1
id, fld1

запрос на блокировку
begin;
select * from table1 where id = 1
FOR update NOWAIT;

запрос на изменение
update table1 set fld1 = 'бла бла бла' where id = 1И второй запрос висит. Так?
...
Рейтинг: 0 / 0
Блокировка записей
    #35280126
Antoxa1982
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я блин сразу не допер.......

Транзакция 2
begin;
select * from table1 where id = 1 FOR update NOWAIT;
update table1 set fld1 = 'бла бла бла' where id = 1;

просто вначале надо попытаться заблокировать запись, если она УЖЕ заблокирована то вылетает эксепшен
could not obtain lock on row in relation

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


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