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

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

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

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

/topic/226705&hl=

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

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

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


Э ... пожалуй, не является. Sorry.
...
Рейтинг: 0 / 0
Можно сделать блокировку записи?
    #34779325
postman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача не очень сложная, есть данные фирм, их должны обрабатывать операторы. Жесткое условие одно, чтобы данные фирмы не могли одновременно быть у двух опреаторов, потому что оператор возможно будет совершать звонки в эти организации, чтоб не получилось дурацкой ситуации, когда в одну контору звонят двое или больше операторов. Сделал пока так - на время считывания данных и установки признака обработки, лочу таблицу, другого простого пути пока не знаю.
...
Рейтинг: 0 / 0
Можно сделать блокировку записи?
    #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
Можно сделать блокировку записи?
    #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
Можно сделать блокировку записи?
    #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
Можно сделать блокировку записи?
    #34780158
Nick Gazaloff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
assa
2 Nick Gazaloff кстати, сравнивая доку, вижу, что 12.3.4. Advisory Locks появилось начиная с 8.2. не подскажете - ф-ии в ей сишные?

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

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


проблема решения со внешней таблицей, насколько я помню свои рассуждения, была только на потерях на соединение таблиц.
...
Рейтинг: 0 / 0
Можно сделать блокировку записи?
    #34780564
postman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Можно сделать блокировку записи?
    #34780657
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Можно сделать блокировку записи?
    #34780873
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assaт.е. иметь сотню - другую версий длинной записи - все равно, что иметь сотню-другую версий короткой?"чтоб не получилось дурацкой ситуации, когда в одну контору звонят двое или больше операторов" - то есть речь не идет о сотне-другой операторов, которые звонят в одну контору. а две версии длинных строк, как и коротких, влезут на одну страницу.

pamirЭэээ... В смысле, не завершая транзакцию? Т.е. фактически блокируя запись?Нет, я имел в виду транзакцию завершать. И только в случае успешного завершения этой транзакции давать оператору возможность просмотра (редактирования) карточки фирмы.

pamirПотому что, если это не так (т.е. просто апдейтим запись и завершаем транзакцию), то представляем себе ситуацию, когда клиентское приложение "карточка" по какой-то причине слетает и запись остается навечно отмечена как "используемая в этот момент".Да, такой эффект видимо имеет место. Вроде бы с "advisory locks" такая же ситуация: "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".

Можно изменить запросы, запретив операторам работать над карточкой фирмы более 1 часа, таким образом:
update firms set caller_id=?, caller_begtime=now() where firm_id=? and ( caller_id is null or caller_begtime < now() - '1 hour' )
update firms set caller_id=null, caller_begtime=null where firm_id=? and caller_id=?
...
Рейтинг: 0 / 0
Можно сделать блокировку записи?
    #34781166
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat pamirПотому что, если это не так (т.е. просто апдейтим запись и завершаем транзакцию), то представляем себе ситуацию, когда клиентское приложение "карточка" по какой-то причине слетает и запись остается навечно отмечена как "используемая в этот момент".Да, такой эффект видимо имеет место. Вроде бы с "advisory locks" такая же ситуация: "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".

Можно изменить запросы, запретив операторам работать над карточкой фирмы более 1 часа, таким образом:
update firms set caller_id=?, caller_begtime=now() where firm_id=? and ( caller_id is null or caller_begtime < now() - '1 hour' )
update firms set caller_id=null, caller_begtime=null where firm_id=? and caller_id=?
Можно так, вот мое предложение (сырое, не проверенное, возможны и даже нужны возражения).
На чем пишется клиент? Если это веб, где нет постоянного коннекта к базе, тогда вариант не проходит. Если же клиент-сервер, где есть постоянный коннект к базе и клиент может им рулить, тогда просто при открытии карточки делаем предложенный апдейт (или просто select for update), но не завершаем транзакцию. После звонка надо нажать кнопку, которая завершит транзакцию и освободит строку (возможно заодно нужно будет и проапдейтить строку на предмет, что до них уже дозвонились). Если приложение слетает, то (как я думаю) в постгресе есть настройка как в оракле, которая указывает что и через какое время делать с неактивными сессиями. Обычно (я чаще сталкивался в оракле) настроено так, что через определенное время неактивности, сессия убивается, а транзакция откатывается. Таким образом, при слете приложения, через какое-то время строка освободится.
...
Рейтинг: 0 / 0
Можно сделать блокировку записи?
    #34781289
postman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу на java se+ jdbc. Операторов у меня не много сейчас не более 4 человек, и предложение LeXa NalBat мне кажется очень подходящим в моей ситуации. А потом попробую добавить то что предложил
pamir для выявления незаконченных сессий. (Сейчас для меня важнее в срок успеть) Программирую недавно, опыта не много, в этом топике узнал новое :) спасибо всем кто отвечал.
...
Рейтинг: 0 / 0
Можно сделать блокировку записи?
    #34781354
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
postmanПишу на java se+ jdbc. Операторов у меня не много сейчас не более 4 человек, и предложение LeXa NalBat мне кажется очень подходящим в моей ситуации. А потом попробую добавить то что предложил
pamir для выявления незаконченных сессий. (Сейчас для меня важнее в срок успеть) Программирую недавно, опыта не много, в этом топике узнал новое :) спасибо всем кто отвечал.
В догонку добавлю - для такой связки следующее решение моего варианта
Есть у тебя
Код: plaintext
Connection dbConn
Ставишь ему
Код: plaintext
dbConn.setAutoCommit(false);
(это если ты уже не заложился в коде на авто-коммит, иначе придется все менять, тогда уж действительно лучше потом, если сроки жмут *)

Потом когда пытаешься выполнить лок строки (или апдейт, что одно и тоже) ловишь
Код: plaintext
SQLException
Дальше либо тупо считаешь, что это означает залоченую строку, либо более изящно - смотришь, что за ошибка и по-разному обрабатываешь.

Ну, а завершаешь все либо
Код: plaintext
dbConn.commit();
Либо
Код: plaintext
dbConn.rollback();
В общем-то не так уж и сложно сразу так сделать, если не оговорка, отмеченная звездочкой (*)
...
Рейтинг: 0 / 0
Можно сделать блокировку записи?
    #34781369
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pamirЕсли же клиент-сервер, где есть постоянный коннект к базе ... или просто select for updateда, вроде бы select for update подходит
...
Рейтинг: 0 / 0
Можно сделать блокировку записи?
    #34781390
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat assaт.е. иметь сотню - другую версий длинной записи - все равно, что иметь сотню-другую версий короткой?"чтоб не получилось дурацкой ситуации, когда в одну контору звонят двое или больше операторов" - то есть речь не идет о сотне-другой операторов, которые звонят в одну контору. а две версии длинных строк, как и коротких, влезут на одну страницу.?Ы?

кажется количестов версий зависит только от частоты их создания и частоты вакуума. если "по поводу" одной и той же записи звонят часто, а вакуум происходит редко - количество отработанных версий будет измеряться не то, чтобы сотнями, но может и тысячами. число 2 в этих суждениях нигде не возникает. (от количества одновременных "операторов, которые звонят" оно, кажется, никак не зависит). Я не прав?
...
Рейтинг: 0 / 0
Можно сделать блокировку записи?
    #34781531
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assaкажется количестов версий зависит только от частоты их создания и частоты вакуума. если "по поводу" одной и той же записи звонят часто, а вакуум происходит редко - количество отработанных версий будет измеряться не то, чтобы сотнями, но может и тысячами. число 2 в этих суждениях нигде не возникает. (от количества одновременных "операторов, которые звонят" оно, кажется, никак не зависит). Я не прав?Я фантазировал на тему "не замедлится ли апдейт для длинных строк по сравнению с короткими". Скорость апдейта наверное слабо зависит от кол-ва старых версий строк в файле.

А не на тему "не увеличится ли файл таблицы", которая вряд ли может волновать нас сама по себе (hdd нынче недороги), но лишь опосредованно негативно влияя на скорость работы СУБД.

PS: "Вакуум происходит редко". Конечно же вакуум надо запускать своевременно.
...
Рейтинг: 0 / 0
Можно сделать блокировку записи?
    #34781798
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeXa NalBat Я фантазировал на тему "не замедлится ли апдейт для длинных строк по сравнению с короткими". Скорость апдейта наверное слабо зависит от кол-ва старых версий строк в файле.спасибо. это дельное замечание. (усложнение запросов и хранимок при добавке таблиц - пожалуй не слишком хорошая плата за решение ,не влияющее на скорость).


с другой стороны, если учесть, что в индексы (до вакуума или реиндекса) входят и указатели на все старые версии записи, то и поиск и апдейт таки замедлятся. Я опять что-то не то думаю?
...
Рейтинг: 0 / 0
Можно сделать блокировку записи?
    #34781930
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assaс другой стороны, если учесть, что в индексы (до вакуума или реиндекса) входят и указатели на все старые версии записи, то и поиск и апдейт таки замедлятсяможет быть и замедлятся. но размер и кол-во индексных указателей и скорость работы с ними не зависит от того, указывают они на длинные строки, или на короткие. то есть "скорость апдейта для длинных строк по сравнению с короткими" от индексов и старых версий записей в них, видимо, не зависит.
...
Рейтинг: 0 / 0
Можно сделать блокировку записи?
    #34781943
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
резонно.
(хотя надо повнимательнее на всю кухню посмотреть)
...
Рейтинг: 0 / 0
Можно сделать блокировку записи?
    #34782709
Nick Gazaloff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
assa Nick Gazaloffпоявилось начиная с 8.2. не подскажете - ф-ии в ей сишные?
Не понял. Функции вызываются, как любые другие:
Код: plaintext
SELECT pg_advisory_lock(id)
я не спрашивал, как они вызываются.
судя по идеологии их можно реализовать хоть на plpgsql (+ доп таблички). Однако - наверное это медленнее, чем класть признаки прям в память. А скачивать 8.2 на предмет посмотреть содержимое pg_proc - мне как-то... да, лениво. Вот и спросил вас. Извините, если что.[/quot]

Реализованы они на C, и работают с менеджером блокировок Postgres. То есть, это тоже локи, которые видно в pg_locks. Только смысл их приложение определяет само, и, так как они advisory, то блокируют они только тех, кто их "уважает" (то есть, все клиенты должны обращаться к ним).

Поскольку ими управляет менеджер блокировок Postgres, то они очень быстрые и автоматичиски освобождаются при закрытии сеанса.
...
Рейтинг: 0 / 0
Можно сделать блокировку записи?
    #34783417
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nick Gazaloff Реализованы они на C спасибо. !0)
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Можно сделать блокировку записи?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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