Доброго времени суток!

FB 2.0.1 CS, 1.5.4 CS

Обнаружил, что выполнение select-запроса в транзакции
consistency
exclusive,
похоже, ставит protected-блокировку на системные таблицы
и при попытке создания новой таблицы (в другой,
read committed,rec_version,nowait транзакции) получаем
unsuccessful metadata update
STORE RDB$FIELDS failed
lock conflict on no wait transaction

Это as designed и правиться не будет?


P.S.
Задача - импорт данных во вновь создаваемую таблицу
в монопольном режиме.
При старте клиент читает и пишет в журнал импорта в consistency-транзакции.
Это гарантирует, что второй экземпляр, будь он запущен, не сможет
помешать работе. Поскольку после создания требуемых таблиц снова
идет обращение к журналу импорта, не хотелось бы прерывать эту транзакцию.

Можно, конечно, реализовать флаг занятости на генераторе и проверять
его при старте клиента, но consistency-транзакция кажется мне более
элегантным решением. Можно использовать специальную таблицу (кстати,
rdb$database не подойдет? :) ) для этих целей, но не хочется умножать сущности без необходимости.
Помнится, на ibase.ru была UDF, реализующая мьютексы, но это совсем
экстремальное решение.


С уважением, Евгений.

Ответить