Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
эксклюзивная блокировка таблицы из SPI_
|
|||
|---|---|---|---|
|
#18+
Интересует время действия блокировки. В доках указано, что команда 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(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 13:51 |
|
||
|
эксклюзивная блокировка таблицы из SPI_
|
|||
|---|---|---|---|
|
#18+
скорее всего SPI_exec("Begin"); вывалится с ошибкой типа "транзакция уже начата" т.к бегин будет вызван уже при вызове процедуры до SPI_connect ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 14:27 |
|
||
|
эксклюзивная блокировка таблицы из SPI_
|
|||
|---|---|---|---|
|
#18+
то есть транзакция в данном случае - это то, что лежит между SPI_connect(); .... SPI_finish();? Вот не могу в доках найти явное объяснение.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 17:13 |
|
||
|
эксклюзивная блокировка таблицы из SPI_
|
|||
|---|---|---|---|
|
#18+
транзакция уже начата до SPI_Connect неявно она начинается при выполнении selecta если это случай типа select * from my_func() и заканчивается при завершении выполнения запроса.. т.е то что происходит внутри my_func() (сишная это функция или plpgsqlная) тоже внутри этой транзакции...и твой LOCK TABLE закончится по ее завершению... но если у тебя pg 8.0 (где поддерживуются вложенные транзакции) то можно попробовать решить твою проблемму..хотя как взаимодействуют вложенные транзакции и LOCK TABLE я не берусь утверждать..но думаю тебе стоит поглядеть в эту сторону. >Вот не могу в доках найти явное объяснение.... думаю и не найдеш , в доках про SPI_* почти ничего не написанно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 19:15 |
|
||
|
эксклюзивная блокировка таблицы из SPI_
|
|||
|---|---|---|---|
|
#18+
2wbear: спасибо за ответ. Вообще - то мне и надо блокировать таблицу до конца работы ф-ии, но знать, как снимать блокировку в любой момент при необходимости, тоже полезно. Правда, я не совсем тогда понимаю, как использовать транцакции внутри ХП, раз её вызов - это уже транзакция. Поковыряюсь в доках ещё. PS postgres у меня 8.0 на SUSE 9.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.05.2005, 17:41 |
|
||
|
|

start [/forum/topic.php?fid=53&tid=2007276]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 380ms |

| 0 / 0 |
