"Andrei" ...
сервер 2.5 RC2
есть код, все делается на одной транзакции:
1) prepare запроса с параметрами, один из параметров БЛОБ
Запрос, судя по всему - INSERT или UPDATE ?
2) запрос в цикле выполняется многократно. Несколько тысяч раз.
3) перед выполнением присваиваются параметры. если есть БЛОБ, то он
создается
и присваивается как QUAD.
4) в базе есть триггер на проверку данных, который дает исключение
приблизительно в 5% случаев
5) отловив исключение, программа меняет некоторые параметры и
повторяет выполнение запроса
БЛОБ QUAD не меняется.
Вот тут точно та же тр-ция ?
так вот, в такой схеме, при повторном выполнении запроса (после
обработки исключения)
произвольным образом (т.е. каждый раз на разных записях) появляется
ошибка "BLOB ID not found".
вылечилось следующим образом: при отлове исключения всегда создается
новый блоб, соответственно
получается новый QUAD, который присваивается параметру.
получается что запрос закончившийся исключением может каким-то образом
убить созданные
до него в рамках текущей транзакции блобы?
Временный блоб привязан к тр-ции, её создавшей. Но как только блоб перестаёт
быть временным, его ID присваивается записи какой-либо таблицы, (т.е. блоб
материализуется), то с этого момента время его жизни привязано уже к этой
записи.
Если запись была откачена (в результате исключения, например), то происходит
сборка мусора и её блобы удаляются.
--
Хорсун Влад
PS не проверял, по памяти всё написал