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

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

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

запрос на изменение
update table1 set fld1 = 'бла бла бла' where id = 1
...
Рейтинг: 0 / 0
25.04.2008, 14:38
    #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
25.04.2008, 14:39
    #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
25.04.2008, 14:56
    #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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Блокировка записей / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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