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. Если позже понадобится сеть и несколько клиентов, тот же файл можно поднять под сервером.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте