Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / эксклюзивная блокировка таблицы из SPI_ / 5 сообщений из 5, страница 1 из 1
03.05.2005, 13:51
    #33046110
mef
mef
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эксклюзивная блокировка таблицы из SPI_
Интересует время действия блокировки. В доках указано, что команда LOCK Table
действует до окончания транзакции и снимается по окончании транзакции автоматом. Так вот не могу понять, если пишется такой примерно код:
...
SPI_connect();
SPI_exec("lock table...");
...
SPI_exec("select ....");
...
SPI_finish();
то блокировка будет держаться до SPI_finish() или ставиться и сразу сниматься в
SPI_exec("lock table...")? То есть в данном случае транзакция - это от SPI_connect() до SPI_finish(), или каждый вызов SPI_exec("") - это своя транзакция?
Или надо обвязывать блоками "Begin transaction" - "commit transaction" необходимые участки кода? Типа

SPI_connect();
SPI_exec("Begin");
SPI_exec("lock table...");
...
SPI_exec("select ....");
SPI_exec("commit");
...
SPI_finish();
...
Рейтинг: 0 / 0
03.05.2005, 14:27
    #33046223
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эксклюзивная блокировка таблицы из SPI_
скорее всего SPI_exec("Begin"); вывалится с ошибкой типа "транзакция уже начата"
т.к бегин будет вызван уже при вызове процедуры до SPI_connect
...
Рейтинг: 0 / 0
03.05.2005, 17:13
    #33046675
mef
mef
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эксклюзивная блокировка таблицы из SPI_
то есть транзакция в данном случае - это то, что лежит между
SPI_connect();
....
SPI_finish();?
Вот не могу в доках найти явное объяснение....
...
Рейтинг: 0 / 0
03.05.2005, 19:15
    #33046915
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эксклюзивная блокировка таблицы из SPI_
транзакция уже начата до SPI_Connect
неявно она начинается при выполнении selecta если это случай типа
select * from my_func() и заканчивается при завершении выполнения запроса..
т.е то что происходит внутри my_func() (сишная это функция или plpgsqlная) тоже внутри этой транзакции...и твой LOCK TABLE закончится по ее завершению...
но если у тебя pg 8.0 (где поддерживуются вложенные транзакции) то можно попробовать решить твою проблемму..хотя как взаимодействуют вложенные транзакции и LOCK TABLE я не берусь утверждать..но думаю тебе стоит поглядеть в эту сторону.

>Вот не могу в доках найти явное объяснение....

думаю и не найдеш , в доках про SPI_* почти ничего не написанно.
...
Рейтинг: 0 / 0
04.05.2005, 17:41
    #33048809
mef
mef
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
эксклюзивная блокировка таблицы из SPI_
2wbear: спасибо за ответ.
Вообще - то мне и надо блокировать таблицу до конца работы ф-ии, но знать, как снимать блокировку в любой момент при необходимости, тоже полезно.
Правда, я не совсем тогда понимаю, как использовать транцакции внутри ХП, раз её вызов - это уже транзакция. Поковыряюсь в доках ещё.
PS postgres у меня 8.0 на SUSE 9.2
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / эксклюзивная блокировка таблицы из SPI_ / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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