powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Корректность insert-запроса в разных осях
25 сообщений из 51, страница 1 из 3
Корректность insert-запроса в разных осях
    #39626440
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся с этим на клиенте, когда на винде запрос отработал без ошибок, а на Дебе - заругался.

табля + триггер
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE TABLE TBL_TEST_UPD
(
  ID INTEGER NOT NULL,
  STR_FLD VARCHAR(100),
  INT_FLD INTEGER,
  CURR_FLD NUMERIC(15,4),
  DATE_FLD TIMESTAMP DEFAULT current_timestamp,
  CONSTRAINT PK_TBL_TEST_UPD PRIMARY KEY (ID)
  USING INDEX PK_TBL_TEST_UPD_IDX
);

GRANT DELETE, INSERT, REFERENCES, SELECT, UPDATE
 ON TBL_TEST_UPD TO  SYSDBA WITH GRANT OPTION;

SET TERM ^ ;
CREATE TRIGGER TBL_TEST_UPD_BI FOR TBL_TEST_UPD ACTIVE
BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GEN_TBL_TEST_UPD_ID,1);
END^
SET TERM ; ^


консоль
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
leyba@debian93:~$ isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect 'localhost:/home/leyba/development/dbase/TEST_TREE.FDB' user sysdba password 'cooladmin';
Database: 'localhost:/home/leyba/development/dbase/TEST_TREE.FDB', User: SYSDBA
SQL> show db;
Database: localhost:/home/leyba/development/dbase/TEST_TREE.FDB
        Owner: SYSDBA                         
PAGE_SIZE 16384
Number of DB pages allocated = 3062
Number of DB pages used = 344
Number of DB pages free = 2718
Sweep interval = 20000
Forced Writes are ON
Transaction - oldest = 8247
Transaction - oldest active = 8248
Transaction - oldest snapshot = 8248
Transaction - Next = 8252
ODS = 12.0
Database not encrypted
Default Character set: UTF8
SQL> show version;
ISQL Version: LI-V3.0.2.32703 Firebird 3.0
Server version:
Firebird/Linux/Intel/i386 (access method), version "LI-V3.0.2.32703 Firebird 3.0"
Firebird/Linux/Intel/i386 (remote server), version "LI-V3.0.2.32703 Firebird 3.0/tcp (debian93)/P15:C"
Firebird/Linux/Intel/i386 (remote interface), version "LI-V3.0.2.32703 Firebird 3.0/tcp (debian93)/P15:C"
on disk structure version 12.0
SQL> show users;
Users in the database
  2 #SYSDBA   
SQL> INSERT INTO TBL_TEST_UPD (STR_FLD, INT_FLD, CURR_FLD, DATE_FLD) VALUES ('STR_FLD', 222, 111.11, CURRENT_TIMESTAMP);
Statement failed, SQLSTATE = 22003
arithmetic exception, numeric overflow, or string truncation
-numeric value is out of range
-At trigger 'TBL_TEST_UPD_BI' line: 6, col: 5
SQL> quit;
leyba@debian93:~$ 



Сервак ставил из архива инсталлятором. Апдейты и удаления проходят без проблем, а вот на вставке такая фигня.

Что не так?
=================
Док.

Win7 Ultim x64/Deb 9.2(GNOME, MATE; gtk2) i386:
FB 3.0.2.32703, диалект 3, SS,
Lazarus 1.9(r.57543); FPC 3.1.1 (r.38588), IBX by -Rik-; IBE 2017.4.19.2
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626445
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,
что покажет
Код: sql
1.
SELECT GEN_ID(GEN_TBL_TEST_UPD_ID, 0) FROM RDB$DATABASE
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626449
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

Влад, я завтра ближе к 13 по Мск смогу проверить :(
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626481
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladчто покажет
офигеть!
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
leyba@debian93:~$ isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect 'localhost:/home/leyba/development/dbase/TEST_TREE.FDB' user sysdba password 'cooladmin';
Database: 'localhost:/home/leyba/development/dbase/TEST_TREE.FDB', User: SYSDBA
SQL> INSERT INTO TBL_TEST_UPD (STR_FLD, INT_FLD, CURR_FLD, DATE_FLD) VALUES ('STR_FLD', 222, 111.11, CURRENT_TIMESTAMP);
Statement failed, SQLSTATE = 22003
arithmetic exception, numeric overflow, or string truncation
-numeric value is out of range
-At trigger 'TBL_TEST_UPD_BI' line: 6, col: 5
SQL> SELECT GEN_ID(GEN_TBL_TEST_UPD_ID, 0) FROM RDB$DATABASE;

               GEN_ID 
===================== 
         206158430233 

SQL> ALTER SEQUENCE GEN_TBL_TEST_UPD_ID RESTART WITH 0;
SQL> commit;
SQL> SELECT GEN_ID(GEN_TBL_TEST_UPD_ID, 0) FROM RDB$DATABASE;

               GEN_ID 
===================== 
                    0 

SQL> INSERT INTO TBL_TEST_UPD (STR_FLD, INT_FLD, CURR_FLD, DATE_FLD) VALUES ('STR_FLD', 222, 111.11, CURRENT_TIMESTAMP);
SQL> commit;
SQL> quit;
leyba@debian93:~$ 



Это я базу просто скопировал из винды в никсы
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626488
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Влад, спасибо
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626553
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понял что
Генератор генерит BIGINT а триггер вставляет значение из генератора в поле INTEGER.
Генератор каким-то образом забрался выше того что влазит в INTEGER и получилось исключение по превышению значения.
?


Не понял про "Это я базу просто скопировал из винды в никсы".

При переносе файла базы с винды на юникс ломаются генераторы?

Или копирование было проведено с какими-то проблемами и файл БД поломался?

Или файл базы нельзя переносить без B/R с винды на юникс?
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626554
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокВлад, спасибо
13958522 :dimitrбазы в ODS 11 и выше можно переносить только между аппаратными платформами с одинаковым порядком байт (endianness), в ODS 10 и ниже - еще и только между платформами с одинаковой разрядностью. Также крайнее желательно совпадение версии ФБ. Других ограничений нет.
Док, у меня недопонимание.
ISQL показывает что у вас Intel, а у всех Intel порядок байт little endian.
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626585
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksНе понял про "Это я базу просто скопировал из винды в никсы".
Деб стоит у меня на виртуалке (vmware). Поскольку основные телодвижения (изменения структуры базы, написание кода клиента) я делаю на виндах, то на никсах я просто проверяю работоспособность "виндового". Базу же я чисто механически скопировал (вместе с исходниками пишущегося софта) в папку Деба, дал на нее права для группы и пользователя firebird. И все. И до сего момента не подозревал о такой засаде.

Специально глянул в генераторы на винде - там к моменту копирования все нормально.

HommerISQL показывает что у вас Intel, а у всех Intel порядок байт little endian.
о-о-о ... "Моя не знает, моя - сапера..." © :)
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626588
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HommerДок, у меня недопонимание.
ISQL показывает что у вас Intel, а у всех Intel порядок байт little endian.Что тут может быть непонятно? Проект FirebirdSQL делается для множества разных платформах, в т.ч. и для платформ с порядком байт "большой индейский".
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626591
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommer 13958522 :
кстати, Винда у меня x64, а Деб i386

Может, тут собака порылась?
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626634
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_devHommerДок, у меня недопонимание.
ISQL показывает что у вас Intel, а у всех Intel порядок байт little endian.Что тут может быть непонятно? Проект FirebirdSQL делается для множества разных платформах, в т.ч. и для платформ с порядком байт "большой индейский".
У Дока обе платформы little endian. Т.е. при переносе всё должно работать, а не работает. Вот на это обратите внимание.
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626639
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devс порядком байт "большой индейский".
"эндиан" (endian) от слова end, и не похоже на "индиан" (indian).
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626664
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокБазу же я чисто механически скопировал (вместе с исходниками пишущегося софта) в папку Деба

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

почему не b&r ?

сервер глушил на винде до копирования ?
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626666
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

ён сдевается, oтось и в кавычки взямши
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626668
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

как вариант, сделаы БД с парой десятков генераторов и скопируй в процесс работы с ней, как ты с этой базой сделал.

а потом попробуй посмотреть как отличаются значения генераторов там и тут, может быть между ними разница или xor почти одинаковая между всеми. Или просто рандомные изменения. Во втором случае ты вероятно мусор как-то в генераторы влил. В первом - несовместимость движка между платформами.
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626707
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доккстати, Винда у меня x64, а Деб i386

Может, тут собака порылась?Это был бы БАГ.
Я только что проверил, почти так же:
- создал БД с 2-мя генераторами используя fb3 x64 on windows
- присвоил им ненулевые значения
- прочитал эти значения используя fb3 x32 on windows
Есс-но, всё в порядке.

Посему, прошу (если это возможно) предоставить мне 2 копии файла БД -
до копирования (нормальную) и после копирования (поломанную)
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626740
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochДокБазу же я чисто механически скопировал (вместе с исходниками пишущегося софта) в папку Деба

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

почему не b&r ?

сервер глушил на винде до копирования ?

IMHO.

На винде глушить сервер не обязательно.
Достаточно закрыть коннекты к базе и переименовать файл БД что бы в процессе копирования никто не прицепился.

Если коннекты есть - переименование не удастся.
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626773
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksДостаточно закрыть коннекты к базе и переименовать файл БД что бы в процессе копирования никто не прицепился.
Если коннекты есть - переименование не удастся.

Все равно лучше штатный b&r. Зачем пляски с переименованием?
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626777
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMasterВсе равно лучше штатный b&r.копирнуть базу в 100 гиг - минуты, прогнать б/р - часы.
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626788
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fraksAriochпропущено...


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

почему не b&r ?

сервер глушил на винде до копирования ?

IMHO.

На винде глушить сервер не обязательно.
Нет ничего лучше чем проверка :)
Попробуйте позвать функцию сразу после закрытия коннекта:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
function IsFileLocked(const FileName: string): Boolean;
var
  Handle: Integer;
begin
  Result := False;
  if FileExists(FileName) then
  begin
    Handle := FileOpen(FileName, fmOpenRead or fmShareExclusive);
    if Handle <> -1 then
      FileClose(Handle)
    else
      Result := True;
  end
  else
    raise Exception.CreateFmt('file %s not found', [FileName]);
end;


Если вернёт True, то файл БД залочен (не может быть открыт на чтение в монопольном режиме)
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626791
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, 32-битные линуксовые сборки не совместимы с 64-битными на уровне ODS.
Разбираемся.
Пока что рекомендованный способ переноса БД на 32-бит linux с другой платформы - бекап\рестор
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626813
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladПосему, прошу (если это возможно) предоставить мне 2 копии файла БД -
до копирования (нормальную) и после копирования (поломанную)Не нужно, Алекс воспроизвёл.

Проблема точно не касается win32 и точно присутствует для 32-битных линуксовых сборок.
Остальные платформы проверим по мере возможности.
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626829
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochкак вариант, сделаы БД с парой десятков генераторов и скопируй в процесс работы с ней, как ты с этой базой сделал.
я навскидку глянул, у всех генераторов с НЕнулевым значением после копирования выставлен верхний предел
<== (Деб) === (Винда) ==>


зы. Базы пока тестовые, на одной машине, в момент копирования никем не модифицируются
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626830
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladПроблема точно не касается win32 и точно присутствует для 32-битных линуксовых сборок.
Остальные платформы проверим по мере возможности.
спасибо, буду ждать.
...
Рейтинг: 0 / 0
Корректность insert-запроса в разных осях
    #39626836
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyDarkMasterВсе равно лучше штатный b&r.копирнуть базу в 100 гиг - минуты, прогнать б/р - часы.

nbackup

ну либо глушите службу

на самый худой случай, переводите бд в shutdown
...
Рейтинг: 0 / 0
25 сообщений из 51, страница 1 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Корректность insert-запроса в разных осях
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]