"Andrei" ...
сервер 2.5 RC2

есть код, все делается на одной транзакции:

1) prepare запроса с параметрами, один из параметров БЛОБ

   Запрос, судя по всему - INSERT или UPDATE ?

2) запрос в цикле выполняется многократно. Несколько тысяч раз.
3) перед выполнением присваиваются параметры. если есть БЛОБ, то он
создается
и присваивается как QUAD.
4) в базе есть триггер на проверку данных, который дает исключение
приблизительно в 5% случаев
5) отловив исключение, программа меняет некоторые параметры и
повторяет выполнение запроса
БЛОБ QUAD не меняется.

   Вот тут точно та же тр-ция ?

так вот, в такой схеме, при повторном выполнении запроса (после
обработки исключения)
произвольным образом (т.е. каждый раз на разных записях) появляется
ошибка "BLOB ID not found".

вылечилось следующим образом: при отлове исключения всегда создается
новый блоб, соответственно
получается новый QUAD, который присваивается параметру.

получается что запрос закончившийся исключением может каким-то образом
убить созданные
до него в рамках текущей транзакции блобы?

   Временный блоб привязан к тр-ции, её создавшей. Но как только блоб перестаёт
быть временным, его ID присваивается  записи какой-либо таблицы, (т.е. блоб
материализуется), то с этого момента время его жизни привязано уже к этой 
записи.
Если запись была откачена (в результате исключения, например), то происходит
сборка мусора и её блобы удаляются.

--
Хорсун Влад

PS не проверял, по памяти всё написал

Ответить