Сейчас портирую базу mysql на pg, со всей логикой программной и возник вопрос: есть ли в pg аналог функции GET_LOCK, RELEASE_LOCK, IS_FREE_LOCK. Можно ли использовать вместо них функции pg_advisory_lock_shared, pg_advisory_unlock_shared?
Если кратко то GET_LOCK, RELEASE_LOCK вызывались в php скрипте, что позволяло блокировать некоторые действия, во избежании потери целостности данных.
Не могли бы написать пример использования pg_advisory_lock_shared, pg_advisory_unlock_shared? Попытки вызвать pg_advisory_lock_shared ничего не дают, ничего не блокируется.
Блокировки в PostgreSQL
Блокировки в PostgreSQL реально нужны крайне редко. Целостность данных в отличие от MySQL поддерживается полноценным набором CONSTRAINT'ов включая нормальный FOREIGN KEY и т.д. Надо лишь учитывать, что в отличие от MySQL, PostgreSQL изначально умела работать с транзакциями, поэтому применение транзакций практически делает блокировки не нужными в большинстве случаев.
Тем не менее, если блокировки таки нужны. Советую внимательным образом изучить документацию. Сам я тут вам не помощник - мне блокировки в работе ещё не требовались. В мануале вроде как всё подробно объясняется что куда и зачем.
Начните с понятия MVCC:
http://postgresql.ru.net/manual/mvcc.html
чтобы понять каки что работает
Ещё не забудьте про advisory locks:
http://postgresql.ru.net/manual/functions-admin.html#FUNCTIONS-ADVISORY-...
Спасибо, я все это изучил
Спасибо, я все это изучил Просто провел ряд тестов и ничего не работало. В отчаянии решил задать вопрос. Но пока ждал ответа нашел бональную ошибку в кодах из-за чего все тесты шли криво. Исправил. Заработало как надо. Только не хватает установки времени блокировки. Еще раз спасибо за ответ.