Quantcast
Channel: SQL.ru: Firebird, InterBase
Viewing all 1677 articles
Browse latest View live

Exists по двум или более таблицам

$
0
0
FB3. Вот такой запрос:
select a.sn_mdl
from modul a
where exists ( select b.id_ums
                     from umass b
                             inner join defect c on c.id_ums=b.id_ums
                     where b.id_mdl=a.id_mdl
                  )


Что нужно? Нужно получить все записи в таблице modul, которые имеют записи в таблице defect. Запрос отрабатывает правильно, но долго. Если в exists оставить одну таблицу umass, то поведение exists ожидаемое (читается по одной записи из umass для каждой записи modul). Если в exists две таблицы, то umass весь читается. Вообще таблицы umass и defect большие. Поэтому хочется такого поведения - читаем запись из modul, читаем последовательно umass и defect, если запись есть, то переходим к другой записи modul. Можно ли что-то сделать с exists? Или посмотреть другие техники? Какие?

linq2db и firebird дружат ?

$
0
0
кто-нибудь пользуется в реальном проекте linq2db для firebird ?
вроде бы все по небольшому но манулалу но:
- соединение с БД не поднимается если порт отличный от 3050, указание порта в строке коннекта как localhost/3250 не срабатывает, других мест конфига для задания порта не нашел
- не увидел в доке какие версии firebird поддерживаются, использую пока fb2.0.6
- нужно работать с уже существующей, средней по размеру, базой - не хочу руками все POCO's классы писать

задача:
переползти в развитии проекта со связки delphi6, fibplus, firebird на c# .Net, winforms + web, orm(выбираю), firebird (не хочу переходить на другие, нравится firebird (удобен, устраивает по функционалу)

может кто сразу проверенные альтернативы orm подскажет ? (далее на очереди проверка daper-а)

DDL и DML в одной транзакции

$
0
0
Вопрос к разработчикам. В ФБ4 остается в силе утверждение

автор
So far the [undocumented] practice was that you cannot mix DDL and DML
inside a single transaction.


?

встака binary string сломалась, дело в размере 32кб? фб не умеет? как победить?

$
0
0
есть таблица (миграции ЕФ)
CREATE TABLE "__MigrationHistory" (	 
	"Model" BLOB SUB_TYPE 0 NOT NULL,	 
) ;


идет инсерт данных длинная строка x'123123123траливали'
и валится ошибка некорректное окончание строки и т.п бредни, причем как из приложения, так и через IBExpert

единственная догадка почему раньше работало(~2 года), а теперь перестало - таблиц и столбцов становилась всё больше и больше
в итоге размер данных для этого столбца просто вышел за 32 кб (предыдущие уже были 31xxx кб) после добавления пары таблиц в схему

нужны какие-нибудь идеи в чем проблема и что можно сделать, учитывая что весь sql генерируется...

Как вытащит дату по дням на период ?

$
0
0
Привет всем
Хочу создать таблицу календарь как вытащит дату по дням на период ? Пример с 2000 г - по 2050 г

BLOB python3 fdb

$
0
0
господа, такая проблема:
есть база, в ней хранятся фотки пользователей в одной из табличек
код пишу на питоне, но думаю проблем тут не должно быть

import fdb
con = fdb.connect(
    host='localhost', database='C:\db.gdb',
    user='sysdba', password='masterkey'
  )

cur = con.cursor()


SQL = "select * from photos_big"

cur.execute(SQL)

for (cli_n, photo) in cur:
    if cli_n == 10:
        filename = 'C:\\'+str(cli_n)+'_big.jpg'
        f2 = open(filename, 'wb')
        f2.write(photo)
        f2.close()
con.commit()
cur.close()
con.close()



этот код работает на ура.
а вот как записать в базу я не понимаю(((

вставляю кусок формирования запроса.

f2 = open(filename167n, 'rb')
photo = f2.read()
f2.close()

SQL = "insert into PHOTOS(CLI_N, PHOTO) Values((%s,%s)" % ('3', photo)

cur.execute(SQL)


и в момент cur.execute(SQL) вылетает ошибка.
я конечно понимаю что пихать в таком виде бинарные данные не лучший вариант, и поэтому наверное это и не работает

подскажите плз, как записать BLOB в поле

заранее огромное спасибо всем кто откликнется

Периодически не срабатывает обработчик события

$
0
0
Всем доброго времени суток!

Столкнулся со проблемой, что ПЕРИОДИЧЕСКИ не срабатывает обработчик ошибок. Есть ПО установленное на сервере. Параметры сервера:

Windows Server 2008 R2 Enterprise
ОЗУ: 8ГГб

FireBird: WI-V2.5.7.27050 Firebird 2.5 - Classic (проблема была и на FB 2.5.2)
Версия fbclient.dll соответствует установленной версии FB. Других версий FB на сервере не установлено и никогда не было.

ПО написана с использование Delphi XE5 и FireDac. Общее количество событий зарегистрированных в FDADEventAlerter = 7

Все пользователи ПО запускают ее на сервере через RDP или RemoteApp (раскидывали прогу по сетевым компам проблема не исчезает).

Пытался менять порт, но все равно проблема остается.

Может кто-то уже сталкивался с такой ситуацией? Что порекомендуете?

Спасибо.

Ошибка при подключении к БД Interbase через Java (Interclient)

$
0
0
Добрый день.

Пытаюсь подключиться к БД Interbase через Java (Interclient).

К БД, в названии которых нет русских символов, подключается нормально, но если встречается БД, у которой в названии файла русские буквы, то вылетает ошибка:

java.sql.SQLException: [interclient][interbase]I/O error for file CreateFile (open)"D:/test/Артем.ibs"
[interclient][interbase]Error while trying to open file
null
	at interbase.interclient.Connection.remote_ATTACH_DATABASE(Unknown Source)
	at interbase.interclient.Connection.connect(Unknown Source)
	at interbase.interclient.Connection.<init>(Unknown Source)
	at interbase.interclient.Driver.connect(Unknown Source)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:208)
	at Main.loadData(Main.java:47)
	at Main.main(Main.java:20)


Чем это лечиться?

Пухнет база от BLOB

$
0
0
вводная:

есть ABS (Automated Bank System), в которую кроме всего прочего складываются фотографии клиентов, а также скан-копии их паспортов.
дабы не засирать основную базу, содержащую Financial Data, создана отдельная база для BLOB. при этом, чтобы обмануть клиентское приложение, складирование в отдельную базу фоток происходит в триггерах через Cross-Database запросы.

-- картинки храню так:
CREATE DOMAIN DOMN$BLOB_IMAGE AS BLOB SUB_TYPE 0 SEGMENT SIZE [PAGE_SIZE базы];


-- эта таблица фоток, есть в обеих базах
CREATE TABLE TABL$R_CS_PHOTO (
    CS_ID        DOMN$INTEGER_ID,  -- код клиента
    ID           DOMN$INTEGER_ID,  -- код фото, строго триггером через GEN_ID
    NAME         DOMN$PSTRING, -- примечание
    FLAG_DELETE  DOMN$BOOLEAN, -- пометка на удаление
    DATE_COMMIT  DOMN$DATETIME, -- дата/время = TIMESTAMP
    PHOTO        DOMN$BLOB_IMAGE  -- картинка
);


-- флаг в базе данных, что нужно складировать фото во внешнюю базу
CREATE GENERATOR GENR$R_CS_PHOTO_EXTERNAL;


-- далее в основной базе идёт cross-database запрос
CREATE OR ALTER TRIGGER TRIG$R_CS_PHOTO_BIU_240 FOR TABL$R_CS_PHOTO
ACTIVE BEFORE INSERT OR UPDATE POSITION 240
AS
  DECLARE VARIABLE P_DB_BLOB  TYPE OF COLUMN TABL$R_FILIALS.DATABASE_NAME_REMOTE;
  DECLARE VARIABLE P_SQL_STMT TYPE OF COLUMN TABL$J_4.DOCSTR;
BEGIN
  IF(GEN_ID(GENR$R_CS_PHOTO_EXTERNAL, 0) <> 1)THEN EXIT;

  SELECT FIRST 1 P.DATABASE_PATH FROM PROC$_DB_PATH_BLOB P INTO :P_DB_BLOB;
  IF(TRIM(:P_DB_BLOB) = '')THEN EXIT;

  IF(NEW.PHOTO IS NULL)THEN
    BEGIN
    P_SQL_STMT =
      'UPDATE OR INSERT INTO TABL$R_CS_PHOTO (CS_ID, ID, NAME, FLAG_DELETE, DATE_COMMIT) '||
      '  VALUES (?Q_CS_ID, ?Q_ID, ?Q_NAME, ?Q_FLAG_DELETE, ?Q_DATE_COMMIT) '||
      '  MATCHING(ID) ';
    EXECUTE STATEMENT (:P_SQL_STMT)(
       Q_CS_ID       := NEW.CS_ID
      ,Q_ID          := NEW.ID
      ,Q_NAME        := NEW.NAME
      ,Q_FLAG_DELETE := NEW.FLAG_DELETE
      ,Q_DATE_COMMIT := NEW.DATE_COMMIT
    )ON EXTERNAL DATA SOURCE :P_DB_BLOB AS USER 'SYSDBA' PASSWORD 'masterkey';
    END
   ELSE
    BEGIN
    P_SQL_STMT =
      'UPDATE OR INSERT INTO TABL$R_CS_PHOTO (CS_ID, ID, NAME, FLAG_DELETE, DATE_COMMIT, PHOTO) '||
      '  VALUES (?Q_CS_ID, ?Q_ID, ?Q_NAME, ?Q_FLAG_DELETE, ?Q_DATE_COMMIT, ?Q_PHOTO) '||
      '  MATCHING(ID) ';
    EXECUTE STATEMENT (:P_SQL_STMT)(
       Q_CS_ID       := NEW.CS_ID
      ,Q_ID          := NEW.ID
      ,Q_NAME        := NEW.NAME
      ,Q_FLAG_DELETE := NEW.FLAG_DELETE
      ,Q_DATE_COMMIT := NEW.DATE_COMMIT
      ,Q_PHOTO       := NEW.PHOTO
    )ON EXTERNAL DATA SOURCE :P_DB_BLOB AS USER 'SYSDBA' PASSWORD 'masterkey';
    NEW.PHOTO = NULL;
    END
END


описание:
я на уровне триггеров перехватываю BLOB, скирдую его в отдельную базу, а в основной за-NULL-яю.

ожидаемое поведение:
т.к. фото сперва попадает в основную базу, то припухнет база на DatabaseGrowIncrement из конфига чтобы вместить фото, ну и чёрт с ней.
потом же она всё-равно складирует во внешнюю.

фактическое поведение:
база всё равно пухнет с очень большой скоростью.
вот, за неделю на отделении оно распухло до 2,5Гб файл базы.
обыкновенный backup-restore привёл базу в нормальное состояние 403 Мб.

вопрос:
я так понял, что моё решение складывать фотки в отдельную базу для данного вопроса (роста файла БД) - не поможет?

SUBSTRING и размер поля

$
0
0
SELECT SUBSTRING( COLUMN1 from 10 for 20 ) .....

В Firebird 2.5 тип возвращаемого столбца будет такой же, как у COLUMN1
Несмотря на явное ограничение длины поля в запросе.
Указано "for 20" - по идее на выходе должны бы получить VarChar(20), если длина исходного столбца больше, но FB2.x этого не учитывает, требует явный CAST.

В FB 3/4 так и осталось, не учитывается принудительное уменьшение длины текста в SUBSTRING ?

Выравнивание размера бэкапа

$
0
0

Кто-нибудь в курсе зачем в конце бэкап добивается до полукилобайта нулями?

Posted via ActualForum NNTP Server 1.5

Первичный и внешний ключ в разных базах данных

$
0
0
Нужно, что бы таблица с первичным ключом
находилась в одной БД, а таблица с внешним
ключом - в другой. И что бы обеспечивалась
ссылочная целостность.

Firebird 3.0

$
0
0
Добрый день.
Пытаюсь поставить Firebird-3.0.2.32703-0.i686.tar
добавил libtommath вроде поставился. при старте firebird говорит
Could not find acceptable ICU library
Security database error
причем в системе

rpm -ql libicu52_1
/usr/lib64/libicudata.so.52.1
/usr/lib64/libicudata.so.52_1
/usr/lib64/libicui18n.so.52.1
/usr/lib64/libicui18n.so.52_1
/usr/lib64/libicuio.so.52.1
/usr/lib64/libicuio.so.52_1
/usr/lib64/libicule.so.52.1
/usr/lib64/libicule.so.52_1
/usr/lib64/libiculx.so.52.1
/usr/lib64/libiculx.so.52_1
/usr/lib64/libicutest.so.52.1
/usr/lib64/libicutest.so.52_1
/usr/lib64/libicutu.so.52.1
/usr/lib64/libicutu.so.52_1
/usr/lib64/libicuuc.so.52.1
/usr/lib64/libicuuc.so.52_1


вопрос: чего ему надо и как запустить?

Формат строки isc_dpb_config

$
0
0
Искал-искал, но нигде не нашёл ответа на простейший вопрос: как объединяются параметры в строке isc_dpb_config. Скажем, "ConnectionTimeout = 180" и "WireCrypt = Enabled". Подозреваю, что через ";", но хотелось бы подтверждения. Заодно это реквест упомянуть об этом где-то в доках.

ANN: Семинар по производительности Firebird в Москве 3 ноября

$
0
0
Всем привет,

3 ноября 2017 в Москве (Технопарк "Слава", метро Калужская) пройдет семинар по СУБД Firebird, посвященный производительности новых версий Firebird.

Семинар является частью мирового тура Firebird 2017 Tour: Performance Optimization, который проходит в Чехии, Германии и России.

Семинар организован Firebird Project и компанией iBase, при поддержке IBPhoenix.
Платиновый спонсор международного тура Firebird - Московская Биржа.

Программа семинара и подробности здесь:
http://www.ibase.ru/firebird-tour-2017-performance-optimization


With best regards,
Alexey Kovyazin

OO API FB3 Освобождение объекта транзакции после rollback

$
0
0
Нужно ли вызывать release() после rollback?

ITransaction имеет интерфейс IReferenceCounted, следовательно нуждается в вызове release() после окончан6ия использования.
Но, если смотреть в примеры, можно заметит следующий шаблон использования:
ITransaction* tra = NULL;
...
tra->commit(&status);
tra = NULL;
...
if (tra)
  tra->release();

Из чего можно заключить, что после commit вызывать release() не нужно.

Но вызовов rollback в примерах нету.
Напрашивается мысля, что действовать нужно но аналогии с commit.
Или я не прав?

Вопрос по внешним ключам

$
0
0
Интересует следующее: есть ли в FB какая-либо системная таблица или еще какой либо способ где можно посмотреть все существующие в базе связки "Ключ - Таблица - Поле"? Чтобы можно было посмотреть из каких таблиц установлен внешний ключ на поле 'blabla_id' в таблице 'blabla_table'. Благодарю.

FB 3.0.2 Invalid data type for multiplication in dialect 1

$
0
0
Привет!
Подскажите, плиз...

FB 3.0.2 (WI-V6.3.2.32703 Firebird 3.0)

База в диалекте 1

На запрос

select 1 from rdb$database where rdb$relation_id  = 1 * :param


ругается

expression evaluation not supported.
Invalid data type for multiplication in dialect 1.

В FB 2.5. это работало.
Помогает cast as integer

Понятно, что связано с тем, что FB не может определить тип параметра в DSQL, но непонятно почему FB 2.5. это мог съесть и при чем тут первый диалект..

FBDataGuard

$
0
0
Я правильно понял, что оно сейчас отдельно не продается, а только в составе HQBird?

Китайские иероглифы, в какой кодировке хранить

$
0
0
Добрый день
Появилась необходимость внести номенклатуру китайскими иероглифами. Пробовал UTF - IBExpert и isql выдают ???.
У кого есть опыт? В блокноте вижу иероглифы как они есть.
Viewing all 1677 articles
Browse latest View live