PostgreSQL / MySQL wire-протокол
FileDB реализует бинарные wire-протоколы PostgreSQL v3 и MySQL — достаточно сменить порт в строке подключения, и приложение работает с FileDB как с настоящей PostgreSQL/MySQL: psql, mysql, psycopg2/libpq, mysql-connector, JDBC и т.п. подключаются напрямую.
Включение
./filedb -data ./databases -pg-addr :5432 -mysql-addr :3306
psql "host=127.0.0.1 port=5432 user=alice dbname=shop sslmode=disable"
mysql -h 127.0.0.1 -P 3306 -u alice -p shop
Оба порта работают с одним и тем же набором .fdb-файлов: запись через MySQL читается через PostgreSQL и наоборот.
Что проверено реальными клиентами
CREATE TABLE (SERIAL/AUTO_INCREMENT), одиночный и многострочный INSERT, INSERT … RETURNING, SELECT с WHERE/ORDER BY/COUNT(*), параметризованные запросы, version()/VERSION(), аутентификация по паролю и роли. Числовые колонки приходят драйверу как int/float, а не строки; текст с ведущими нулями ('00123') остаётся строкой без потерь.
Экранирование строк по диалектам
Строковые литералы декодируются по семантике того протокола, по которому пришёл запрос: PostgreSQL — только '' → ', обратный слеш — обычный символ; MySQL — полный набор бэкслеш-эскейпов (для кавычек, перевода строки, табуляции, нуля, backspace и т.д.) плюс ''. С v2.44 это гарантированно единообразно для одиночного и многострочного INSERT ... VALUES (...), (...) и для литералов в ON DUPLICATE KEY UPDATE — до этого multi-row INSERT по MySQL-протоколу мог терять экранирующие бэкслеши.
Ограничения wire-слоя
- TLS не поддерживается —
SSLRequestполучает отказ, соединение продолжается без шифрования. Используйтеsslmode=disableи туннель/VPN/доверенную сеть. - Подготовленные выражения по бинарному протоколу обрабатываются, но результат возвращается в текстовом представлении.
- Поддерживается то подмножество SQL, что понимает движок — например, голый
SELECT 1безFROMиINSERT … DEFAULT VALUESне реализованы.
Аутентификация
Использует ту же модель пользователей, что и HTTP (см. страницу RBAC). MySQL поддерживает mysql_native_password без дополнительных флагов клиента; старые учётки без поля mysql_native авторизуются через mysql_clear_password (клиент должен разрешить плагин: mysql --enable-cleartext-plugin).