Странное поведение генераторов в Firebird

Модератор: Модераторы

Ответить
wwswowsogon
постоялец
Сообщения: 157
Зарегистрирован: 23.12.2008 19:41:37

Странное поведение генераторов в Firebird

Сообщение wwswowsogon »

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

Продолжаю упражняться в переносе проекта на Linux, и продолжаются дикие проблемы. :)

Установил Firebird 3.0, и оказалось, что вставка данных в БД сопровождается сообщением

Код: Выделить всё


arithmetic exception, numeric overflow, or string truncation firebird
numeric value is out of range.

Долго думал, в чём дело, пока не сделал в isql SHOW GENERATORS.

Оказалось, что у всех таблиц ГРОМАДНЫЕ текущие значения генераторов.

При этом при просмотре той же БД через Windows-Firebird3, все значения генераторов такие, какими им и положено быть.

Такое впечатление, что на Linux'e значения генераторов инвертированы, получены вычитанием правильного текущего значения из максимально возможного. )

Кто что может сказать по этому поводу?
DedFrend
постоялец
Сообщения: 157
Зарегистрирован: 25.11.2018 11:21:50

Re: Странное поведение генераторов в Firebird

Сообщение DedFrend »

Давно работаю с Firebird и в линуксе и в винде, и с 2.5 и с 3.0, но ничего подобного не видел.
Впрочем, на заре своей работы с firebird я использовал вызов генератора из триггера и, помнится,
тоже видел какие-то жуткие числа пока записи не коммичены.
wwswowsogon
постоялец
Сообщения: 157
Зарегистрирован: 23.12.2008 19:41:37

Re: Странное поведение генераторов в Firebird

Сообщение wwswowsogon »

Вот такая красота:

Код: Выделить всё

SQL> show generators;
Generator GEN_ACOMBLOOD_ID, current value: 339302416384, initial value: 0, increment: 1
Generator GEN_ACOMUR_ID, current value: 300647710720, initial value: 0, increment: 1
Generator GEN_ACTIVEUSERS_ID, current value: 8216272437251, initial value: 0, increment: 1
Generator GEN_ADDRESS2_ID, current value: 25769803776, initial value: 0, increment: 1
Generator GEN_ADDRESS_ID, current value: 292057776128, initial value: 0, increment: 1
Generator GEN_ANALYSIS_ID, current value: 184683593728, initial value: 0, increment: 1
Generator GEN_ANALYSLIST_ID, current value: 8431020802048, initial value: 0, increment: 1
Generator GEN_AUSUAL_ID, current value: 1181116006400, initial value: 0, increment: 1
Возможно, Firebird как-то криво встал. Ставил из стандартного репозитория Kubuntu...
DedFrend
постоялец
Сообщения: 157
Зарегистрирован: 25.11.2018 11:21:50

Re: Странное поведение генераторов в Firebird

Сообщение DedFrend »

Я всегда получаю ключи с помощью

Код: Выделить всё

select GEN_ID(mygen_ID,1) as NewKey from RDB$DATABASE

и никаких проблем не вижу
slyubez
постоялец
Сообщения: 185
Зарегистрирован: 31.03.2015 07:44:07

Re: Странное поведение генераторов в Firebird

Сообщение slyubez »

Впрочем, на заре своей работы с firebird я использовал вызов генератора из триггера и, помнится, тоже видел какие-то жуткие числа пока записи не коммичены.
А каким образом Вы смотрели эти числа?
Оказалось, что у всех таблиц ГРОМАДНЫЕ текущие значения генераторов.
При этом при просмотре той же БД через Windows-Firebird3, все значения генераторов такие, какими им и положено быть.
Диалект базы какой?
DedFrend
постоялец
Сообщения: 157
Зарегистрирован: 25.11.2018 11:21:50

Re: Странное поведение генераторов в Firebird

Сообщение DedFrend »

диалект тогда, скорее всего, был 1, а firebird 1.5 . Смотрел в отладчике и сначала о.. удивился, а потом решил,
что firebird генерит для клиента какие-то произвольные числа, которые при коммит превращаются на сервере
в реальные.
В общем я отказался от получения ключей в триггере, предпочев самостоятельно их получать от генератора
и вставлять в OnNewRecord
slyubez
постоялец
Сообщения: 185
Зарегистрирован: 31.03.2015 07:44:07

Re: Странное поведение генераторов в Firebird

Сообщение slyubez »

В общем я отказался от получения ключей в триггере, предпочев самостоятельно их получать от генератора и вставлять в OnNewRecord
Как знаете... Я что в 1.5 на Винде, что в 2.5 на Линухе использую как раз присваивание идентификаторов в триггере. С 2.5 использую RETURNING для возврата значения идентификатора. Диалект в базах всегда третий. Проблем не вижу.
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Re: Странное поведение генераторов в Firebird

Сообщение svk12 »

ALT 9.2, LI-V3.0.7.33374 Firebird 3.0

Код: Выделить всё

SQL> show generators;
Generator ABOTDNUM, current value: 5703, initial value: 0, increment: 1
Generator CARDSNUM, current value: 0, initial value: 0, increment: 1
Generator CHANGESNUM, current value: 1, initial value: 0, increment: 1
Generator CHLOGNUM, current value: 10594863, initial value: 0, increment: 1
Generator CHPAIRSNUM, current value: 0, initial value: 0, increment: 1
Generator CL2NUM, current value: 162, initial value: 0, increment: 1
Generator CLASSIDS, current value: 72, initial value: 0, increment: 1
Generator CLMTYPENUM, current value: 32, initial value: 0, increment: 1
Generator COINBOXNUM, current value: 10, initial value: 0, increment: 1
Generator COINCABNUM, current value: 12, initial value: 0, increment: 1
Generator COINCATNUM, current value: 10, initial value: 0, increment: 1
Generator COINPARTSNUM, current value: 10, initial value: 0, increment: 1
Generator COINTYPENUM, current value: 6, initial value: 0, increment: 1
Generator CTRANSMAINNUM, current value: 29, initial value: 0, increment: 1
Generator DBLISTNUM, current value: 64, initial value: 0, increment: 1
Generator DEBITORSNUM, current value: 7, initial value: 0, increment: 1
Generator DETAILSNUM, current value: 0, initial value: 0, increment: 1
Generator DEVTYPENUM, current value: 9, initial value: 0, increment: 1
Generator FIRMSNUM, current value: 351, initial value: 0, increment: 1
Generator FNDTYPENUM, current value: 77, initial value: 0, increment: 1
Generator GENREFSNUM, current value: 2300, initial value: 0, increment: 1
Generator GENSTATNUM, current value: 0, initial value: 0, increment: 1
wwswowsogon
постоялец
Сообщения: 157
Зарегистрирован: 23.12.2008 19:41:37

Re: Странное поведение генераторов в Firebird

Сообщение wwswowsogon »

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

Некоторое время вынужденно не занимался вышеобозначенным вопросом.

Изначально проблему увидел на Kubuntu 18.04 32bit на реальном железе.

Вчера и сегодня протестировал поведение связки Firebird + тестовая БД на следующих системах, на виртуальных машинах:

- Kubuntu 18.04.5 32bit;
- Kubuntu 18.04.5 64bit;
- Ubuntu 18.04 64bit;
- XUbuntu 22.04 64bit;
- AltLinux 9.2 32bit;

Результат: проблема с генераторами проявляется только на Kubuntu 18.04 32bit, как на реальной, так и на виртуальной машине. На аналогичной 64-битной системе, как и на всех других системах, где мне удалось установить Firebird 3.0, проблема отсутствует.

С моей точки зрения всё это крайне удивительно.

Можно было бы и забыть об этом эпизоде, поставив себе заметку не использовать данное ПО на данной системе, тем более, что она уже не очень актуальна.

Но хотелось бы понимания, что происходит, хотя бы для общего развития.

Добавлено спустя 1 час 38 минут 11 секунд:
Единственное, что могу предположить - особенности поведения deb-пакета на Ubuntu-подобных 32-битных системах. У Альта пакеты свои, поэтому и проблема не проявляется.

Ради чистоты эксперимента можно было бы протестировать на Ubuntu 18.04 x32, но найти его непросто. Возможно, его вообще не существует.
delphius
постоялец
Сообщения: 131
Зарегистрирован: 18.03.2020 12:40:11

Re: Странное поведение генераторов в Firebird

Сообщение delphius »

С моей точки зрения всё это крайне удивительно.
В свете модной тенденции, пошептался с ChatGPT по вашему вопросу.
Чтобы не длиннопостить, выложу его выкладки временно тут, ибо может быть совсем не по делу :mrgreen:
Ответить