Страница 1 из 2

Миграция IB6 -> FB2

Добавлено: 17 май 2006, 15:45
Vas
Здравствуйте !

Недавно попробовал ФБ2, и его скорость очень приятно удивила (на некоторых селектах выигрышь в 3 раза)
Какие поджидают грабли при переносе базы из IB6 под FB2.
Пока наткнулся на 2

1. Имена объектов (таблицы, тригеры, процедуры) не больше 27 символов
2. Разный синтаксис группировок
IB: GROUP BY FILED1, FIELD2
FB: GROUP BY АГРЕГАТ(FILED1), АГРЕГАТ(FIELD2)

Добавьте список, пожалуйста.

Добавлено: 17 май 2006, 15:47
Vas
Добавлю еще, что диалект 1.

Добавлено: 17 май 2006, 16:39
kdv
по поводу синтаксиса группировок - все то же самое. Другое дело, что FB 2.0 как и FB 1.0 и 1.5 более жестко относится к некорректным запросам, которые ранее допускались во всей линейке IB. Поэтому некоторые запросы, разумеется, будут давать ошибку на FB. И такие запросы надо исправлять.
насчет имен объектов до 27 символов - это что-то новое, надо будет проверить.

Добавлено: 17 май 2006, 16:56
dimitr
kdv писал(а):насчет имен объектов до 27 символов - это что-то новое, надо будет проверить
это чтобы RDB$SECURITY_CLASS не обрезался и гранты не глючили

Добавлено: 17 май 2006, 23:47
Vas
Еще такой вопрос по поводу группировок: я, вроде, заметил, что процедура с таким некорректным с точки зрения ФБ ( и корректным с т.з. ИБ ) запросом вполне нормально создается (т.е. поднимается из бэкапа), но при вызове дает какие-то странные ошибки. Можно ли это проконтролировать при ресторе из ФБ ?
Насчет 27-ми символов - в интербейсе их, по-моему 61.
И всё-таки, на что еще обратить внимание при переходе ? Где еще проглючить может ?

Добавлено: 18 май 2006, 00:38
dimitr
1. странные ошибки - это что? Процитировать никак?
2. при ресторе ты ничего не проконтролируешь. Код будет работать как раньше. При пересоздании объектов могут быть ошибки.
3. 61 символ - в IB7. Ты же выше говорил про IB6?

Добавлено: 18 май 2006, 15:16
Vas
1. К сожалению ФБ пока снес, а ошибки не записал
2. А как автоматически пересоздать кучу процедур, связанных между собой ? ИБ эксперт умеет ? Может достаточно перекомпилять ?
3. Ошибся, извините. База под ИБ7 крутится, но ничего ИБ7-специфик в ней нет ( кроме нескольких очень длинных имен ). Синтаксис целиком совместим с 6-кой.

Добавлено: 19 май 2006, 16:03
Slava Ekimov
dimitr писал(а):
kdv писал(а):насчет имен объектов до 27 символов - это что-то новое, надо будет проверить
это чтобы RDB$SECURITY_CLASS не обрезался и гранты не глючили
Кстати, по этому поводу.
Вчера только выяснили практическим путем это ограничение.
Я со времен 5.6 помню, что объекты могут быть 32 символа. (или 31? не помню точно)
И нигде не написано про урезание до 27.
Сейчас специально искал - нету.
Очень хочется поругаться, но на кого не знаю.

Добавлено: 19 май 2006, 16:24
dimitr
31 символ. Но борманы так криво реализовали секьюрность, что длина более 27 может привести к куче проблем с правами. Потому мы воткнули ограничение. Оно временное, в скором времени мы переделаем все по-человечески. Было ли документировано - честно говоря, не помню. Очень может быт, что и нет.

Добавлено: 13 июн 2006, 14:33
dimitr
Slava Ekimov писал(а):Вчера только выяснили практическим путем это ограничение.
А я вчера таки решил проверить сам. И нифига не увидел, без проблем создав таблицу и процедуру с именем длиной в 31 символ :-) Пробовал на 1.5.3 и 2.0 - результат идентичен.

В общем, покажите мне дорогу к этой грабле :-)

Добавлено: 14 июн 2006, 13:28
Slava Ekimov
dimitr писал(а): В общем, покажите мне дорогу к этой грабле :-)
Насчет ограничений - это я как раз про права. Отняли права на одну процедуру, а люди работать не могут, потому что и вторая отнялась. И все это очень весело, когда ты домой уже ушел.

Добавлено: 14 июн 2006, 14:36
dimitr
понятно. А то я подумал, что в 2.0 мы еще и создавать объекты длинее 27 символов запретили :-) Первый пост этой ветки на это указывает.

Добавлено: 21 сен 2006, 15:49
Vas
dimitr писал(а):А то я подумал, что в 2.0 мы еще и создавать объекты длинее 27 символов запретили :-) Первый пост этой ветки на это указывает.
Создавать (CREATE PROCEDURE и т.д.) я не пробовал, но из бэкапа процедуру с длинным именем двойка поднимать отказывается.

Добавлено: 21 сен 2006, 16:16
Vas
Сейчас внимательнее посмотрел свой вопрос, и понял, что про группировки неправильно спросил.
Там вот как на самом деле:
1. Работает в ИБ, не работает в ФБ
group by field1
ORDER BY field1
2. Работает в ФБ, не работает в ИБ
group by field1
ORDER BY АГРЕГАТ(field1)
Вот так вот.

Добавлено: 21 сен 2006, 23:12
dimitr
Vas писал(а):1. Работает в ИБ, не работает в ФБ
group by field1
ORDER BY field1
недоговариваешь или брешешь. Полный запрос покажи.

Добавлено: 22 сен 2006, 13:06
Vas
dimitr писал(а):
Vas писал(а):1. Работает в ИБ, не работает в ФБ
group by field1
ORDER BY field1
недоговариваешь или брешешь. Полный запрос покажи.
Блин, точно набрехал. Имелось ввиду
group by field1
ORDER BY FIELD2

т.е. по другому полю сортировка.

Добавлено: 22 сен 2006, 13:17
dimitr
и это правильно. Ибо чревато белибердой.

Добавлено: 22 сен 2006, 15:44
kdv
и это правильно. Ибо чревато белибердой.
типа

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

select id, count(field)
group by id
order by field
?

Добавлено: 03 окт 2006, 16:48
Vas
Еще одно отличие. Датабаза - стандартный EMPLOYEE

Исходный запрос работает на обоих серверах без проблем:

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

select * from
department d
join department d1 on d.head_dept=d1.dept_no
left join employee emp on emp.emp_no=d.mngr_no
Теперь немного модифицируем его, перенеся джойн во вхерю. интербейс отрабатывает нормально, фаерберд выдает ошибку

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

select * from
department d,
 department d1
left join employee emp on emp.emp_no=d.mngr_no
where d.head_dept=d1.dept_no
Ошибка:
"The cursor identified in the update or delete statement is not positioned on a row.
No current record for fetch operation."

Офтопик
IBExpert'овцы! верните CTRL-C в MessageBox, а то руками набивать замучался

Добавлено: 03 окт 2006, 18:09
Merlin
Vas писал(а):интербейс отрабатывает нормально, фаерберд выдает ошибку

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

select * from
department d,
 department d1
left join employee emp on emp.emp_no=d.mngr_no
where d.head_dept=d1.dept_no
Ошибка:
"The cursor identified in the update or delete statement is not positioned on a row.
No current record for fetch operation."
И правильно делает.
Vas писал(а): Офтопик
IBExpert'овцы! верните CTRL-C в MessageBox, а то руками набивать замучался
И все побежали искать Хвастунова.