Firebird — реляционная СУБД, выросшая из InterBase и сохранившая главную особенность: база данных физически представляет собой один файл .fdb. В серверном режиме к нему подключаются по сети, а во встроенном (embedded) приложение открывает файл само, без отдельного процесса и настройки портов. Это делает Firebird удобным для настольных программ и небольших внутренних сервисов. В 2026 году стабильная ветка — 5.0, версия 6.0 находится в разработке.
Почему Firebird, а не SQLite
SQLite тоже хранит базу в файле, но Firebird ближе к классической СУБД: диалект SQL 3, хранимые процедуры, триггеры, последовательности, роли и развитая система прав. Он использует многоверсионность (MVCC), поэтому читатели не блокируют писателей на уровне всей таблицы. Для приложения с транзакциями и SQL-логикой это больше, чем даёт SQLite.
Обратная сторона — размер: для сборки нужен клиент libfbclient и движок. Зато один файл открывается и встроенно, и через сервер, а копирование делается штатными утилитами.
Установка: пакет или контейнер
В Ubuntu 26.04 доступен пакет Firebird 4.0; официальную ветку 5.0 удобно запустить в Docker. Файл, созданный в 5.0, не откроется движком 4.0.
sudo apt install firebird4.0-server firebird4.0-utils
sudo systemctl status firebird4.0
docker run -d --name fb5 -p 3050:3050 \
-e ISC_PASSWORD='Sd3v-Example-Only' firebird:5.0
docker logs fb5
Пароль в примере — только для локальной демонстрации. Для рабочей установки задайте длинный пароль и закройте порт 3050. Добавьте том -v firebird_data:/var/lib/firebird.
Создание базы и первый вход
В Debian и Ubuntu утилита называется isql-fb, в официальной сборке — isql. Запустите её без аргументов и выполните CREATE DATABASE: путь указывается в кавычках, владельцем становится указанный пользователь. Каталог /srv/firebird должен быть доступен на запись этому пользователю.
isql-fb
SQL> CREATE DATABASE '/srv/firebird/app.fdb'
CON> USER 'SYSDBA' PASSWORD 'Sd3v-Example-Only'
CON> PAGE_SIZE 8192 DEFAULT CHARACTER SET UTF8;
SQL> SHOW DATABASE;
SQL> EXIT;
8192 байта — разумный размер страницы. Firebird 5 поддерживает 4096, 8192, 16384 или 32768 байт; больший размер помогает индексам, но расходует память. Кодировку UTF8 задавайте сразу: смена набора символов у существующей базы — сложная операция.
Без хоста файл создаёт клиент, и владельцем становится ваш пользователь. Для владельца-службы firebird используйте localhost:/srv/firebird/app.fdb.
Таблицы, identity и триггеры
Firebird поддерживает identity: генераторы и триггеры не нужны.
CREATE TABLE device (
id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
name VARCHAR(120) NOT NULL,
seen_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE event (
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
device_id INTEGER NOT NULL REFERENCES device(id),
payload VARCHAR(500),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Для пакетной вставки удобен EXECUTE BLOCK — анонимный блок с циклом без создания процедуры.
SET TERM ^ ;
EXECUTE BLOCK AS
DECLARE VARIABLE n INTEGER = 0;
BEGIN
WHILE (n < 10) DO
BEGIN
INSERT INTO device (name) VALUES ('sensor-' || CAST(n AS VARCHAR(10)));
n = n + 1;
END
END^
SET TERM ; ^
SET TERM меняет разделитель, чтобы точка с запятой внутри блока не завершала команду. Для регулярных операций лучше хранимая процедура: её план кэшируется.
Встроенный режим и приложение
В embedded-режиме строка подключения — путь к файлу без имени хоста. Клиент libfbclient загружает движок libEngine13.so для Firebird 4/5 и открывает базу в процессе приложения. Пароль не проверяется: доступ определяется правами файловой системы, в отличие от сервера с SRP-аутентификацией.
Пример на Python: установите драйвер, клиентскую библиотеку и движок.
# app.py
import firebird.driver as fdb
con = fdb.connect(
database='/srv/firebird/app.fdb',
user='SYSDBA',
password='Sd3v-Example-Only',
)
cur = con.cursor()
cur.execute('select count(*) from device')
print(cur.fetchone())
con.close()
Запуск: python3 app.py. Если указать localhost:/srv/firebird/app.fdb, драйвер пойдёт по сети. Ошибка «Unable to complete network request to host localhost» обычно означает отсутствие движка: клиент ушёл в loopback.
Embedded или сервер
- Embedded — одно приложение, нет сетевого порта, минимум настройки;
- сервер — несколько клиентов, централизованные права, резервное копирование и мониторинг;
- embedded не рассчитан на несколько независимых процессов;
- файл базы нельзя класть в общий каталог с широкими правами;
- для удалённого доступа и репликации нужен серверный режим.
Права на файл — периметр безопасности embedded-базы: каталог доступен только службе и группе приложения. Копии тоже нужно защищать.
Резервное копирование и восстановление
gbak делает логическую копию, переносимую на другую версию. Запускайте backup по расписанию и проверяйте восстановление на отдельном хосте.
gbak -b -v -g /srv/firebird/app.fdb /srv/backup/app-$(date +%F).fbk
gbak -c -v /srv/backup/app-2026-11-06.fbk /srv/firebird/restore.fdb
gfix -v -full /srv/firebird/app.fdb
gfix -sweep /srv/firebird/app.fdb
-b — backup, -c — создание базы из копии, -g — сборка мусора при копировании. gfix -v -full проверяет структуру, gfix -sweep удаляет старые версии записей. Для инкрементальных копий есть nbackup, но начинать стоит с полного gbak.
Диагностика
Утилита gstat показывает заголовок базы, индексы и версии записей. Это первое, что стоит смотреть при жалобах на размер файла или медленные запросы.
isql-fb -z
gstat -h /srv/firebird/app.fdb
gstat -i /srv/firebird/app.fdb
gstat -r /srv/firebird/app.fdb
-h выводит страницы и параметры, -i — статистику индексов, -r — количество старых версий записей. Большое число версий указывает на долгие транзакции: программа держит транзакцию и не даёт сборщику очистить мусор. Ищите долгоживущие соединения и завершайте их штатно.
Чек-лист
- Определите режим: embedded или сервер.
- Создайте базу с UTF8 и страницей 8192 байта.
- Ограничьте права на
.fdbи каталог с копиями. - Настройте ежедневный
gbakи проверку восстановления. - Следите за старыми версиями записей через
gstat -r.
Итог
Firebird занимает нишу между SQLite и полноценным сервером: он даёт настоящий SQL, транзакции и хранимые процедуры, но умеет работать как встроенная библиотека с одним файлом. Для небольшого приложения это меньше инфраструктуры и больше возможностей, чем у файловых БД. Начните с Firebird 5.0, создайте базу через isql, проверьте embedded-подключение и сразу настройте gbak. Если позже понадобится сеть и несколько клиентов, тот же файл можно поднять под сервером.