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

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

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

Сообщение wwswowsogon » 09.03.2023 19:40:56

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

Продолжаю упражняться в переносе проекта на 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 значения генераторов инвертированы, получены вычитанием правильного текущего значения из максимально возможного. )

Кто что может сказать по этому поводу?
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

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

Сообщение DedFrend » 09.03.2023 20:44:39

Давно работаю с Firebird и в линуксе и в винде, и с 2.5 и с 3.0, но ничего подобного не видел.
Впрочем, на заре своей работы с firebird я использовал вызов генератора из триггера и, помнится,
тоже видел какие-то жуткие числа пока записи не коммичены.
DedFrend
постоялец
 
Сообщения: 156
Зарегистрирован: 25.11.2018 12:21:50

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

Сообщение wwswowsogon » 09.03.2023 22:03:26

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

Код: Выделить всё
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...
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

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

Сообщение DedFrend » 10.03.2023 20:08:15

Я всегда получаю ключи с помощью
Код: Выделить всё
select GEN_ID(mygen_ID,1) as NewKey from RDB$DATABASE

и никаких проблем не вижу
DedFrend
постоялец
 
Сообщения: 156
Зарегистрирован: 25.11.2018 12:21:50

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

Сообщение slyubez » 11.03.2023 11:04:47

Впрочем, на заре своей работы с firebird я использовал вызов генератора из триггера и, помнится, тоже видел какие-то жуткие числа пока записи не коммичены.

А каким образом Вы смотрели эти числа?

Оказалось, что у всех таблиц ГРОМАДНЫЕ текущие значения генераторов.
При этом при просмотре той же БД через Windows-Firebird3, все значения генераторов такие, какими им и положено быть.

Диалект базы какой?
slyubez
постоялец
 
Сообщения: 173
Зарегистрирован: 31.03.2015 08:44:07

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

Сообщение DedFrend » 11.03.2023 12:40:01

диалект тогда, скорее всего, был 1, а firebird 1.5 . Смотрел в отладчике и сначала о.. удивился, а потом решил,
что firebird генерит для клиента какие-то произвольные числа, которые при коммит превращаются на сервере
в реальные.
В общем я отказался от получения ключей в триггере, предпочев самостоятельно их получать от генератора
и вставлять в OnNewRecord
DedFrend
постоялец
 
Сообщения: 156
Зарегистрирован: 25.11.2018 12:21:50

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

Сообщение slyubez » 12.03.2023 17:45:58

В общем я отказался от получения ключей в триггере, предпочев самостоятельно их получать от генератора и вставлять в OnNewRecord

Как знаете... Я что в 1.5 на Винде, что в 2.5 на Линухе использую как раз присваивание идентификаторов в триггере. С 2.5 использую RETURNING для возврата значения идентификатора. Диалект в базах всегда третий. Проблем не вижу.
slyubez
постоялец
 
Сообщения: 173
Зарегистрирован: 31.03.2015 08:44:07

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

Сообщение svk12 » 13.03.2023 18:51:41

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
svk12
постоялец
 
Сообщения: 407
Зарегистрирован: 09.06.2008 18:42:47

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

Сообщение wwswowsogon » 21.03.2023 21:42:27

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

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

Изначально проблему увидел на 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, но найти его непросто. Возможно, его вообще не существует.
wwswowsogon
постоялец
 
Сообщения: 152
Зарегистрирован: 23.12.2008 20:41:37

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

Сообщение delphius » 22.03.2023 00:30:40

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

В свете модной тенденции, пошептался с ChatGPT по вашему вопросу.
Чтобы не длиннопостить, выложу его выкладки временно тут, ибо может быть совсем не по делу :mrgreen:
delphius
постоялец
 
Сообщения: 122
Зарегистрирован: 18.03.2020 13:40:11


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru