powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
25 сообщений из 39, страница 1 из 2
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642130
buhrstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пробуем использовать подход Code First (Entity Framework 6.2) в связке с СУБД Firebird 3.0.
Для небольшой модели (до 10 таблиц) миграции генерируются и выполняются.

Проблема возникает при наличии большой модели (в нашем случае 153 таблицы) - в этом случае мы столкнулись с "ограничением на максимальную длину BINARY типа":

FirebirdSql.Data.FirebirdClient.FbException (0x80004005): Dynamic SQL Error
Dynamic SQL Error
SQL error code = -104
String literal with 66866 characters exceeds the maximum length of 65535 characters for the BINARY character set


Естественно, что при генерации SQL-запроса и попытке выполнить данный запрос через IBExpert результат аналогичный.

Подскажите, есть ли какие-то способы обойти данное ограничение?
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642133
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buhrstone,

Надо бы использовать нормальный тип BLOB SUB_TYPE BYNARY. Пиши автору NET провайдера чтобы подправил его.
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642139
buhrstone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис, вроде, именно BLOB SUB_TYPE BYNARY и генерируется. DDL прилагаю:


CREATE TABLE "__MigrationHistory" (
"MigrationId" VARCHAR(150) NOT NULL,
"ContextKey" VARCHAR(300) NOT NULL,
"Model" BLOB SUB_TYPE 0 SEGMENT SIZE 80 NOT NULL,
"ProductVersion" VARCHAR(32) NOT NULL
);
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642141
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buhrstone,

а... понятно. В текст ошибки не вчитался. Эти гады используют строковые литералы вместо параметров. Всё равно пиши автору провайдера, если конечно это возможно поправить на уровне провайдера.
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642148
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buhrstone...мы столкнулись с "ограничением на максимальную длину BINARY типа":

FirebirdSql.Data.FirebirdClient.FbException (0x80004005): Dynamic SQL Error
Dynamic SQL Error
SQL error code = -104
String literal with 66866 characters exceeds the maximum length of 65535 characters for the BINARY character set


Естественно, что при генерации SQL-запроса и попытке выполнить данный запрос через IBExpert результат аналогичный.
...
А нельзя ли каким-либо образом посмотреть на сам "проблемный" запрос?
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642153
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Котовасия,

я тебе и без запроса скажу что проблема в длинном строковом литерале
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642155
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

в принципе литерал можно разбить на 2 и объединить их через конкатенацию ||
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642274
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисЭти гады используют строковые литералы вместо параметров.
А существуют ли ещё сервера где есть ограничения на длину строковых литералов в килобайтах?
Может таких нет :)

Кстати, все ограничения на длины и вообще константы можно держать в firebird.conf.
Например:
- MaxQuerySize = 64K -- в PostgreSQL = 1GB
- MaxVarcharSizeInBytes = 64K -- в PostgreSQL = 1GB
- MaxConnectionCount = 100 -- кол-во одновременных подключений (не знаю есть ли ограничение в коде FB)

И сразу всем хорошо.
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642287
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommer,

MaxQuerySize в Firebird 3.0 = 10Мб (и то введено искусственно чтобы сервер не накрывался медным тазом когда в него сотню двухгиговых запросов пошлют). Не вижу смысла регулировать в конфиге. Можно конечно сделать как в Pg, вот только зачем. Ты действительно можешь представить себе запрос размером в 1Gb?

MaxConnectionCount нет такого ограничения в коде Fb. Но в целом ограничение конечно есть, но оно скорее связано с ограничениями ОС и доступными ресурсами.

> А существуют ли ещё сервера где есть ограничения на длину строковых литералов в килобайтах?

понятия не имею ибо никогда не передавал в литералах столь длинных значений (по крайней мере сам). З.Ы. Работаю не только с Firebird.
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642308
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисMaxQuerySize в Firebird 3.0 = 10Мб (и то введено искусственно чтобы сервер не накрывался медным тазом когда в него сотню двухгиговых запросов пошлют). Не вижу смысла регулировать в конфиге. Можно конечно сделать как в Pg, вот только зачем. Ты действительно можешь представить себе запрос размером в 1Gb?
Смысл есть. Тут наверняка у многих есть базы с блобами, размер которых превышает 64K.
Чтобы понять что это такое, попробуйте создать табличку с бинарным блобом, потом попробуйте положить туда изображение > 64K. Положить можно в IBExpert. А потом попытайтесь выгрузить запись таблички в скрипт. Получится один большой insert.
В этом и есть проблема. Табличка в скрипт выгружается, но скрипт не заработает потому что в FB есть ограничение на длину литералов.
Любая таблица должна иметь возможность быть выгруженной в скрипт, в последовательность insert-ов. Согласны? А у нас даже табличку с фотографиями не выгрузить.

И ещё есть ограничение на размер запроса. Хотя 10MB и существенно, но не всегда хватает. Когда не хватит, то вместо того чтобы просто поменять параметр MaxQuerySize, придётся что-то изобретать. Я сам через это проходил с длинными триггерами в 2.1. Удовольствие на любителя.
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642313
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HommerА существуют ли ещё сервера где есть ограничения на длину строковых литералов в килобайтах?

Oracle - 4000 байт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642314
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommer,

ну хорошо. Берём твой любимый Pg. Делаем в нём чудесную табличку и грузим туда 10Гб файлов, каждый файл по одному гигабайту. Делаем экспорт в скрипт а потом восстанавливаем его на другом компе. Готов провести сей эксперимент? 10 Гб ведь совсем немного. Главный вопрос удастся ли тебе провести сию операцию. И если удастся то каким инструментом.

Согласен литерал мог бы быть и больше в размерах, но уж точно не 2Гб.

HommerИ ещё есть ограничение на размер запроса. Хотя 10MB и существенно, но не всегда хватает.

Когда не хватает. Пример в студию

> Я сам через это проходил с длинными триггерами в 2.1.
Тогда ограничение было в 64K

Hommer некоторые ограничения не просто так появляются, а из соображений здравого смысла.
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642316
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

какой ужасный сервер!!! Если применить логику Hommer, то им вообще не возможно пользоваться.
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642333
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисHommer,

ну хорошо. Берём твой любимый Pg. Делаем в нём чудесную табличку и грузим туда 10Гб файлов, каждый файл по одному гигабайту. Делаем экспорт в скрипт а потом восстанавливаем его на другом компе. Готов провести сей эксперимент? 10 Гб ведь совсем немного. Главный вопрос удастся ли тебе провести сию операцию. И если удастся то каким инструментом.

У нас с вами что за игра?
Я вам говорю что у нас табличку с картинками не выгрузить.
А вы мне что?

Симонов Денисв принципе литерал можно разбить на 2 и объединить их через конкатенацию ||
Arithmetic overflow or division by zero has occurred.
Concatenation overflow. Resulting string cannot exceed 32765 bytes in length.
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642337
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommer,


а если к BLOB конкатенацию сделать то прокатит.
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642338
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommer,

> Я вам говорю что у нас табличку с картинками не выгрузить.

А я говорю можно, но делать это надо не в строковый литерал
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642342
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Дениса если к BLOB конкатенацию сделать то прокатит.
Код: sql
1.
insert into TEST(B) values (x'FFFFFFFFFFFFFFFFFFFFFFFF' || x'FFFFFFFFFFFFFFFFFFFFFFFF');


Это не то?
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642344
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommer,

вот так прокатывает. Только что загрузил картинку в 1 Мб, выгрузил в скрипт и ещё раз загрузил. Главное заставить Firebird думать что он соединяет блобы

Код: sql
1.
2.
INSERT INTO T1 (PIC)
VALUES (cast('' as blob sub_type binary) || x'FFFFFFFFFFFFFFFFFFFFFFFF' || x'FFFFFFFFFFFFFFFFFFFFFFFF' ...);
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642349
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисГлавное заставить Firebird думать что он соединяет блобы
Работает. Но до такого ни разработчики драйверов ни те кто делают выгрузку в скрипт, явно не додумались бы. А предлагать им такое как способ решения стремновато. Сразу вопрос возникнет: а нормально разве нельзя сделать? :)
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642351
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommer,

нормально, это когда данные вставляются через параметризованные запросы, а не через скрипты
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642355
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон разума таки рождает чудовищ
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642366
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommer,

посмотри что ты наделал 21397964 и ещё меня соучастником сделал
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642368
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HommerХотя 10MB и существенно, но не всегда хватает.
если будет реально не хватать - всегда можно подвинуть. Есть вменяемый пример из жизни, без проктологии? Выгрузка больших блобов сюда не относится, ибо там проблема будет с литералами.
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642369
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HommerСимонов ДенисMaxQuerySize в Firebird 3.0 = 10Мб (и то введено искусственно чтобы сервер не накрывался медным тазом когда в него сотню двухгиговых запросов пошлют). Не вижу смысла регулировать в конфиге. Можно конечно сделать как в Pg, вот только зачем. Ты действительно можешь представить себе запрос размером в 1Gb?
Смысл есть. Тут наверняка у многих есть базы с блобами, размер которых превышает 64K.
Чтобы понять что это такое, попробуйте создать табличку с бинарным блобом, потом попробуйте положить туда изображение > 64K. Положить можно в IBExpert. А потом попытайтесь выгрузить запись таблички в скрипт. Получится один большой insert.
В этом и есть проблема. Табличка в скрипт выгружается, но скрипт не заработает потому что в FB есть ограничение на длину литералов.
Любая таблица должна иметь возможность быть выгруженной в скрипт, в последовательность insert-ов. Согласны? А у нас даже табличку с фотографиями не выгрузить.

...
Здравствуйте, товарищ Хоммер!
Задача выгрузки данных с большими блобами в скрипт решается очень просто, средствами ИБЭксперт. Есть такой режим, когда блобы выгружаются в отдельные файлы. И, соответственно, загружаются в базу обратно.
Имхо, весьма удобно, ибо не требуется впихивать в текст скрипта нетекстовые данные, да и вообще - скрипт становится "обозреваемым".

Используем либо ИБЕксперт, либо поставляемую с ним в комплекте длл (не вижу отсюда ее названия, что-то "...скрипт...длл".
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642370
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениспосмотри что ты наделал 21397964 и ещё меня соучастником сделал IBE давно умеет импорт\экспорт блобов через скрипты
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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