Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Курсор без транзакции / 6 сообщений из 6, страница 1 из 1
19.02.2008, 17:39
    #35142273
Zashibis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор без транзакции
Проблема такая - нужно создать курсор, который бы не зависел от транзакции.
1) Создаем курсор, немного бегаем по нему
2) BEGIN
3) некоторые действия с базой
4) COMMIT
5) продолжаем бегать по тому же курсору

Стандартными средствами DECLARE это невозможно, она работает только внутри транзакций или ХП.
Покопался в документации, наткнулся на SPI
http://www.postgresql.org/docs/8.2/static/spi.html
Вопрос: если я напишу процедуру на С, которая вызывает метод SPI_cursor_open и создает курсор, после выхода из процедуры курсор сохранится или разрушится? Кто-нибудь пробовал такое? И можно ли будет вызвать такую процедуру на С вне транзакции?
Ореинтируюсь так же на:
http://www.postgresql.org/docs/8.2/static/view-pg-cursors.html
...
Рейтинг: 0 / 0
19.02.2008, 18:12
    #35142389
Dan Black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор без транзакции
Как вариант, можно попробовать использовать dblink
З.Ы.
А почему в программе нельзя просто параллельно открыть второе соединенине?
Код: plaintext
1.
----------------------------
 Verba volent, scripta manent 
...
Рейтинг: 0 / 0
19.02.2008, 18:31
    #35142440
Zashibis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор без транзакции
Гм, действительно, почему бы не открыть второе соединение...а dblink разве не тоже самое?
Подумаю, не повлияет ли это на работу транзакции.
...
Рейтинг: 0 / 0
19.02.2008, 21:57
    #35142763
domanix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор без транзакции
Кто вам сказал что Стандартными средствами DECLARE это невозможно?
Код: plaintext
1.
2.
DECLARE name [ BINARY ] [ INSENSITIVE ] [ [ NO ] SCROLL ]
    CURSOR [ { WITH | WITHOUT } HOLD ] FOR query
Обратите внимание на параметр WITH HOLD

Код: plaintext
WITH HOLD specifies that the cursor can continue to be used after the transaction that created it successfully commits.

IMHO: Физически это выглядит так- результат запроса скидывается на диск и по нему идет навигация вперед и назад - до тех пор пока курсор не будет закрыт явно.. ( Именно таким образом достигается независимость от транзакции)...
...
Рейтинг: 0 / 0
20.02.2008, 10:18
    #35143325
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор без транзакции
Zashibis пишет:
> Проблема такая - нужно создать курсор, который бы не зависел от транзакции.

Не бывает такого.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
20.02.2008, 11:52
    #35143767
Zashibis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Курсор без транзакции
Ооо! Огромное спасибо!
При добавлении WITH HOLD курсор вообще не зависит от транзакций! Создается, используется и удаляется где угодно. Правда работает капельку медленнее, но это не фатально.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Курсор без транзакции / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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