После двух с половиной лет разработки представлен релиз реляционной СУБД Firebird 5.0. Firebird продолжает развитие кода СУБД InterBase 6.0, открытого в 2000 году компанией Borland. Firebird распространяется под свободной лицензией MPL и поддерживает стандарты ANSI SQL, в том числе такие возможности, как триггеры, хранимые процедуры и репликацию. Бинарные сборки подготовлены для Linux, Windows, macOS и Android.
Ключевые новшества:
- Реализована возможность выполнения операций в многопоточном режиме. Распараллеливание в несколько потоков применимо при создании индексов, сборке мусора (автоматические и ручные операции sweep), создании резервных копий и восстановлении из них.gfix -sweep -parallel 4 dbname
gbak -b -par 4 -user username -pass password dbname backupname - Добавлена поддержка частичных индексов, включающих только выборочные записи, соответствующие указанным при создании индекса условиям.CREATE INDEX IT1_COL ON T1 (COL) WHERE COL < 100;
- В выражениях SELECT WITH LOCK, UPDATE и DELETE реализован синтаксис “SKIP LOCKED”, позволяющий исключить записи, для которых на момент отправки запроса выставлена блокировка (например, чтобы не ждать освобождения блокировки при пересечении с другой транзакцией).
- Добавлена возможность обновления БД до актуальной промежуточной версии хранилища (ODS – On-Disk-Structure) на лету (inline update) без создания и восстановления из резервной копии. Например, теперь можно на лету преобразовать БД в формате Firebird 4.0 (ODS 13.0) в формат Firebird 5.0 (ODS 13.1).
- Реализован кэш скомпилированных SQL-выражений, обслуживаемый автоматически (устаревающие записи очищаются по мере необходимости). Размер кэша задаётся через параметр MaxStatementCacheSize в firebird.conf.
- Добавлен интерфейс для профилирования SQL и PSQL, позволяющий оценивать время выполнения каждого запроса, накапливать статистику о числе запросов и выявлять проблемы с производительностью.
- В выражение MERGE добавлена поддержка условного блока “WHEN NOT MATCHED BY SOURCE”, срабатывающего когда исходная запись не соответствует ни одной записи в целевом наборе.MERGE INTO customers c USING new_customers nc ON (c.id = nc.id)
WHEN MATCHED THEN
UPDATE SET name = nc.name
WHEN NOT MATCHED BY SOURCE THEN
DELETE - Обеспечена возможность возвращения нескольких строк выражением RETURNING, если заданное DML-выражение охватывает несколько строк (ранее в подобных ситуациях выводилась ошибка “multiple rows in singleton select”).
- Добавлены новые встроенные функции: UNICODE_CHAR для возвращения unicode-символа, соответствующего заданному коду, и UNICODE_VAL для возвращения кода для заданного символа. В функции EXTRACT, FIRST_DAY и LAST_DAY добавлен параметр QUARTER для определения номера квартала.
- Добавлен новый системный пакет RDB$BLOB_UTIL с подборкой операций с BLOB-ами для модулей PSQL.
- Улучшен алгоритм сжатия записей, который теперь применяет счётчик переменной длины для более эффективной упаковки повторяющихся последовательностей данных. Оптимизация позволила значительно повысить степень сжатия не полностью заполненных длинных полей VARCHAR с данными в кодировке UTF-8.
- Добавлена возможность работы с двунаправленными курсорами (scrollable) при удалённом сетевом обращении к БД.
- Проведена оптимизация производительности копирования блобов.
- Добавлена полная поддержка синтаксиса определения строк, описанного в стандарте SQL. Например, строки теперь могут разрываться комментариями или пробелами:select ‘ab’ /* comment */ ‘cd’ from RDB$DATABASE;
select ‘ab’ ‘cd’ from RDB$DATABASE;