Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно сделать блокировку записи? / 25 сообщений из 40, страница 1 из 2
31.08.2007, 10:10
    #34766736
postman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
Здравтсвуйте, сообственно инетересует эта тема, можно ли сделать блокировку строки, чтобы на время транзакции другой клиент ее не мог прочитать(только одну строку) ?
...
Рейтинг: 0 / 0
31.08.2007, 10:14
    #34766758
landy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
читаем доку тут про LOCKING-ROWS
...
Рейтинг: 0 / 0
31.08.2007, 10:20
    #34766780
postman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
Спасибо, уже читаем :)
...
Рейтинг: 0 / 0
31.08.2007, 10:31
    #34766838
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
postmanЗдравтсвуйте, сообственно инетересует эта тема, можно ли сделать блокировку строки, чтобы на время транзакции другой клиент ее не мог прочитать(только одну строку) ?
А зачем? Какую задачу нужно решить? :)
ИМХО это противоречит идеи версионности СУБД.
...
Рейтинг: 0 / 0
31.08.2007, 10:36
    #34766853
postman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
Мне надо заблокировать запись, чтобы обновить в ней данные, и чтобы в этот момент ее не смог считать другой клиент
...
Рейтинг: 0 / 0
31.08.2007, 11:36
    #34767165
alex_v13
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
SELECT for UPATE - читайте доку
...
Рейтинг: 0 / 0
31.08.2007, 11:59
    #34767295
Andrey Daeron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
alex_v13SELECT for UPATE - читайте доку
Не, на ЧТЕНИЕ не поможет. Версионник итить колотить.
На столько экслюзивных локов я в доках не нашел. Лочить всю таблицу, наверно единственный выход.
Или приверно так:
1. При чтении вешать на все что читаем СЕЛЕКТ ФОР АПДЕЙТ (опционально новейт)
Но тут нужно будет транзакции и для чтения думать/тестить. По крайней мере под делфами были проблемы с ораклом на автокомитных транзакциях.
2. Ну при изменениях - все вроде как должно быть хорошо.
...
Рейтинг: 0 / 0
31.08.2007, 12:05
    #34767328
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
что за странная идея? Данные в другой транзакции могут и не закоммититься, а вы пользователю не даете читать старые. Зачем? На момент чтения данные есть. Какие-то. Пусть их и читает.

Нафига из постгреса делать мс-скл?
...
Рейтинг: 0 / 0
31.08.2007, 12:13
    #34767367
Nick Gazaloff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
Можно во всех клиентах использовать advisory locks.
...
Рейтинг: 0 / 0
31.08.2007, 12:20
    #34767397
postman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
Мне действительно надо блокировать доступ на чтение, чтобы одна запись обрабатывалась только ОДНИМ клиентом. Доку читал, тоже ничего кроме экслюзив лока не нашел(может плохо искал)
...
Рейтинг: 0 / 0
31.08.2007, 13:38
    #34767784
Nick Gazaloff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
postmanМне действительно надо блокировать доступ на чтение, чтобы одна запись обрабатывалась только ОДНИМ клиентом. Доку читал, тоже ничего кроме экслюзив лока не нашел(может плохо искал)

http://www.sbin.org/doc/pg/doc/explicit-locking.html#ADVISORY-LOCKS
...
Рейтинг: 0 / 0
03.09.2007, 11:42
    #34771120
Cane Cat Fisher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
А что значит "обрабатывалась"? Неужели для прочих она должна исчезнуть даже на чтение? Это несколько необычно, и это настораживает... Нельзя ли подробнее, что за задача?
...
Рейтинг: 0 / 0
04.09.2007, 12:46
    #34774126
ilejn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
Cane Cat FisherА что значит "обрабатывалась"? Неужели для прочих она должна исчезнуть даже на чтение? Это несколько необычно, и это настораживает... Нельзя ли подробнее, что за задача?

Пару лет назад я пытался здесь

/topic/226705&hl=

обрисовать случай, когда эксклюзивная блокировка записи на чтение может быть полезна.
...
Рейтинг: 0 / 0
04.09.2007, 18:53
    #34775679
Cane Cat Fisher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
В том топике я так и не нашел пояснения, для чего это нужно. А так - для читающих транзакций вроде бы подойдет SELECT FOR SHARE, для пишущих - SELECT FOR UPDATE. Или нет?
...
Рейтинг: 0 / 0
05.09.2007, 10:12
    #34776502
strizh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
>А что значит "обрабатывалась"? Неужели для прочих она должна исчезнуть даже на чтение? Это
>несколько необычно, и это настораживает... Нельзя ли подробнее, что за задача?

Чел, наверное, решает стандартную телекомовскую задачу доступа к сумме баланса пользователя с кучи сервисов одновременно :) Так она не локами решается, а резервированием денег :)
...
Рейтинг: 0 / 0
05.09.2007, 10:35
    #34776595
Dan Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
strizh
Чел, наверное, решает стандартную телекомовскую задачу доступа к сумме баланса пользователя с кучи сервисов одновременно :) Так она не локами решается, а резервированием денег :)
вообще-то задача доступа к балансу пользователя является стандартной не только для телекома
можно полюбопытствовать, что за вариант с резервированием денег?
...
Рейтинг: 0 / 0
05.09.2007, 15:40
    #34778188
ilejn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
Cane Cat FisherВ том топике я так и не нашел пояснения, для чего это нужно. А так - для читающих транзакций вроде бы подойдет SELECT FOR SHARE, для пишущих - SELECT FOR UPDATE. Или нет?

Все правильно.
В PostgreSQL нужно использовать SELECT FOR SHARE, и это является ответом на вопрос автора топика.
Oracle аналогичной фичи не имеет.
...
Рейтинг: 0 / 0
05.09.2007, 16:55
    #34778578
ilejn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
ilejn[
В PostgreSQL нужно использовать SELECT FOR SHARE, и это является ответом на вопрос автора топика.


Э ... пожалуй, не является. Sorry.
...
Рейтинг: 0 / 0
05.09.2007, 20:27
    #34779325
postman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
Задача не очень сложная, есть данные фирм, их должны обрабатывать операторы. Жесткое условие одно, чтобы данные фирмы не могли одновременно быть у двух опреаторов, потому что оператор возможно будет совершать звонки в эти организации, чтоб не получилось дурацкой ситуации, когда в одну контору звонят двое или больше операторов. Сделал пока так - на время считывания данных и установки признака обработки, лочу таблицу, другого простого пути пока не знаю.
...
Рейтинг: 0 / 0
05.09.2007, 21:05
    #34779360
Nick Gazaloff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
PostgreSQL provides a means for creating locks that have application-defined meanings. These are called advisory locks, because the system does not enforce their use — it is up to the application to use them correctly. Advisory locks can be useful for locking strategies that are an awkward fit for the MVCC model. Once acquired, an advisory lock is held until explicitly released or the session ends. Unlike standard locks, advisory locks do not honor transaction semantics: a lock acquired during a transaction that is later rolled back will still be held following the rollback, and likewise an unlock is effective even if the calling transaction fails later. The same lock can be acquired multiple times by its owning process: for each lock request there must be a corresponding unlock request before the lock is actually released. (If a session already holds a given lock, additional requests will always succeed, even if other sessions are awaiting the lock.) Like all locks in PostgreSQL, a complete list of advisory locks currently held by any session can be found in the pg_locks system view.

Advisory locks are allocated out of a shared memory pool whose size is defined by the configuration variables max_locks_per_transaction and max_connections. Care must be taken not to exhaust this memory or the server will not be able to grant any locks at all. This imposes an upper limit on the number of advisory locks grantable by the server, typically in the tens to hundreds of thousands depending on how the server is configured.

A common use of advisory locks is to emulate pessimistic locking strategies typical of so called "flat file" data management systems. While a flag stored in a table could be used for the same purpose, advisory locks are faster, avoid MVCC bloat, and are automatically cleaned up by the server at the end of the session.


И так далее.
...
Рейтинг: 0 / 0
06.09.2007, 10:50
    #34780089
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
postmanЗадача не очень сложная, есть данные фирм, их должны обрабатывать операторы. Жесткое условие одно, чтобы данные фирмы не могли одновременно быть у двух опреаторов, потому что оператор возможно будет совершать звонки в эти организации, чтоб не получилось дурацкой ситуации, когда в одну контору звонят двое или больше операторов.В момент открытия оператором карточки фирмы делается транзакция "update firms set caller_id=? where firm_id=? and caller_id is null", в момент закрытия - "update firms set caller_id=null where firm_id=? and caller_id=?".
...
Рейтинг: 0 / 0
06.09.2007, 10:58
    #34780124
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
LeXa NalBatВ момент открытия оператором карточки фирмы делается транзакция "update firms set caller_id=? where firm_id=? and caller_id is null", в момент закрытия - "update firms set caller_id=null where firm_id=? and caller_id=?".в свое время думал, что для версионника вместо апдейта (длинной записи) имеет смысл делать INSERT/DELETE в (короткозаписной) таблице флагов.


2 Nick Gazaloff кстати, сравнивая доку, вижу, что 12.3.4. Advisory Locks появилось начиная с 8.2. не подскажете - ф-ии в ей сишные?
...
Рейтинг: 0 / 0
06.09.2007, 11:05
    #34780158
Nick Gazaloff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
assa
2 Nick Gazaloff кстати, сравнивая доку, вижу, что 12.3.4. Advisory Locks появилось начиная с 8.2. не подскажете - ф-ии в ей сишные?

Не понял. Функции вызываются, как любые другие:

Код: plaintext
SELECT pg_advisory_lock(id)
...
Рейтинг: 0 / 0
06.09.2007, 11:45
    #34780399
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
assaв свое время думал, что для версионника вместо апдейта (длинной записи) имеет смысл делать INSERT/DELETE в (короткозаписной) таблице флагов.не знаю. в постгресе чтение и запись идет постранично? если да, то получается все равно.
...
Рейтинг: 0 / 0
06.09.2007, 11:51
    #34780431
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно сделать блокировку записи?
Nick Gazaloffпоявилось начиная с 8.2. не подскажете - ф-ии в ей сишные?
Не понял. Функции вызываются, как любые другие:
Код: plaintext
SELECT pg_advisory_lock(id)
[/quot]я не спрашивал, как они вызываются.
судя по идеологии их можно реализовать хоть на plpgsql (+ доп таблички). Однако - наверное это медленнее, чем класть признаки прям в память. А скачивать 8.2 на предмет посмотреть содержимое pg_proc - мне как-то... да, лениво. Вот и спросил вас. Извините, если что.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно сделать блокировку записи? / 25 сообщений из 40, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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