Миграция IB6 -> FB2
Миграция IB6 -> FB2
Здравствуйте !
Недавно попробовал ФБ2, и его скорость очень приятно удивила (на некоторых селектах выигрышь в 3 раза)
Какие поджидают грабли при переносе базы из IB6 под FB2.
Пока наткнулся на 2
1. Имена объектов (таблицы, тригеры, процедуры) не больше 27 символов
2. Разный синтаксис группировок
IB: GROUP BY FILED1, FIELD2
FB: GROUP BY АГРЕГАТ(FILED1), АГРЕГАТ(FIELD2)
Добавьте список, пожалуйста.
Недавно попробовал ФБ2, и его скорость очень приятно удивила (на некоторых селектах выигрышь в 3 раза)
Какие поджидают грабли при переносе базы из IB6 под FB2.
Пока наткнулся на 2
1. Имена объектов (таблицы, тригеры, процедуры) не больше 27 символов
2. Разный синтаксис группировок
IB: GROUP BY FILED1, FIELD2
FB: GROUP BY АГРЕГАТ(FILED1), АГРЕГАТ(FIELD2)
Добавьте список, пожалуйста.
по поводу синтаксиса группировок - все то же самое. Другое дело, что FB 2.0 как и FB 1.0 и 1.5 более жестко относится к некорректным запросам, которые ранее допускались во всей линейке IB. Поэтому некоторые запросы, разумеется, будут давать ошибку на FB. И такие запросы надо исправлять.
насчет имен объектов до 27 символов - это что-то новое, надо будет проверить.
насчет имен объектов до 27 символов - это что-то новое, надо будет проверить.
Еще такой вопрос по поводу группировок: я, вроде, заметил, что процедура с таким некорректным с точки зрения ФБ ( и корректным с т.з. ИБ ) запросом вполне нормально создается (т.е. поднимается из бэкапа), но при вызове дает какие-то странные ошибки. Можно ли это проконтролировать при ресторе из ФБ ?
Насчет 27-ми символов - в интербейсе их, по-моему 61.
И всё-таки, на что еще обратить внимание при переходе ? Где еще проглючить может ?
Насчет 27-ми символов - в интербейсе их, по-моему 61.
И всё-таки, на что еще обратить внимание при переходе ? Где еще проглючить может ?
1. К сожалению ФБ пока снес, а ошибки не записал
2. А как автоматически пересоздать кучу процедур, связанных между собой ? ИБ эксперт умеет ? Может достаточно перекомпилять ?
3. Ошибся, извините. База под ИБ7 крутится, но ничего ИБ7-специфик в ней нет ( кроме нескольких очень длинных имен ). Синтаксис целиком совместим с 6-кой.
2. А как автоматически пересоздать кучу процедур, связанных между собой ? ИБ эксперт умеет ? Может достаточно перекомпилять ?
3. Ошибся, извините. База под ИБ7 крутится, но ничего ИБ7-специфик в ней нет ( кроме нескольких очень длинных имен ). Синтаксис целиком совместим с 6-кой.
-
- Сообщения: 44
- Зарегистрирован: 26 окт 2004, 14:30
Кстати, по этому поводу.dimitr писал(а):это чтобы RDB$SECURITY_CLASS не обрезался и гранты не глючилиkdv писал(а):насчет имен объектов до 27 символов - это что-то новое, надо будет проверить
Вчера только выяснили практическим путем это ограничение.
Я со времен 5.6 помню, что объекты могут быть 32 символа. (или 31? не помню точно)
И нигде не написано про урезание до 27.
Сейчас специально искал - нету.
Очень хочется поругаться, но на кого не знаю.
-
- Сообщения: 44
- Зарегистрирован: 26 окт 2004, 14:30
типаи это правильно. Ибо чревато белибердой.
Код: Выделить всё
select id, count(field)
group by id
order by field
Еще одно отличие. Датабаза - стандартный EMPLOYEE
Исходный запрос работает на обоих серверах без проблем:
Теперь немного модифицируем его, перенеся джойн во вхерю. интербейс отрабатывает нормально, фаерберд выдает ошибку
Ошибка:
"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, а то руками набивать замучался
Исходный запрос работает на обоих серверах без проблем:
Код: Выделить всё
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, а то руками набивать замучался
И правильно делает.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, а то руками набивать замучался