powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
39 сообщений из 39, показаны все 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
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642371
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Котовасия> очень просто, средствами ИБЭксперт. Есть такой
Котовасия> режим, когда блобы выгружаются в отдельные файлы.
Котовасия> И, соответственно, загружаются в базу обратно.
Котовасия> Имхо, весьма удобно ...

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

я в курсе. Изначально речь шла о .NET провайдере и способе EF отслеживать изменения в моделях. Это они генерируют запрос с литералом > 64K. А уж IBE сюда для теста обходных путей привлекли
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642378
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Дениспосмотри что ты наделал 21397964 и ещё меня соучастником сделал
Пойду тикет сделаю в трекере. Или вы сделаете? :)
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642379
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hommer,

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

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

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

страдай.
Спасибо, но нет.
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39642524
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не люблю школьников.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39646583
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийне люблю школьников.Это потому, что их бить нельзя.
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39646607
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
18.05.2018 11:05, WildSery пишет:
> Это потому, что их бить нельзя.

#онижедети! (С)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39646806
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий18.05.2018 11:05, WildSery пишет:
> Это потому, что их бить нельзя.

#онижедети! (С)


Может сжечь? Напалма в ветке уже хватает...
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39646919
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladСон разума таки рождает чудовищ
Понимание - краеугольный камень истины :)
...
Рейтинг: 0 / 0
Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
    #39647001
Коваленко Дмитрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HommerСимонов ДенисГлавное заставить Firebird думать что он соединяет блобы
Работает. Но до такого ни разработчики драйверов ни те кто делают выгрузку в скрипт, явно не додумались бы. А предлагать им такое как способ решения стремновато. Сразу вопрос возникнет: а нормально разве нельзя сделать? :)

Я не проверял, но похоже формированием строкового представления данных (в EF.Core) занимаются методы GenerateNonNullSqlLiteral класса RelationalTypeMapping.

Попробуй доработать связанный код для бинарных данных. Может получится.

Насколько я понимаю, дорабатывать надо будет не только для бинарных блобов, но и для CHAR/VARCHAR с кодовой страницей OCTETS.
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Большая модель (Entity Framework Code First, dotNet) и БД Firebird 3.0
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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