Differences between Firebird and InterBase
(c) Dmitry Kuzmenko, Alexey Kovyazin, IBSurgeon, 21.05.2017
Historical overview
InterBase was created in 1985: it was the first commercial multi-versioning database. In the end of 1999, Borland decided to close InterBase development and published its source codes under InterBase Public License. This code was copied (it is permitted by the license), and Firebird was born - from the version 1.0 Firebird is a production-ready database, based on previous decades of InterBase development.
At the end of 2000, Borland turned back to the closed source and commercial licenses (exactly as it was earlier) with InterBase and started development of 6.5.
Firebird 1.0 was released in 2002, with many bugfixes and extensions of DDL and DML. The active Firebird development continued after 1.0, and in 2004 the second major version of Firebird (v.1.5) was released. Borland at that time also has introduced new versions (7.0 and 7.1). Firebird 1.5 and InterBase 7.0 was incompatible both by database format (ODS) and core functionality. The migration from InterBase to Firebird and back with backup/restore is impossible since Firebird 2.0 and InterBase 7.0.
Since then, the difference between Firebird and InterBase became bigger.
Current situation (2017)
The only way for migration between current versions of InterBase and Firebird is through SQL script (with the manual fixing of differences) and then pumping of data from the old database to the new one. However, the migration from InterBase to Firebird is still easier than to another DBMS, since the transaction management principles are the same.
We did several such migrations for various versions of InterBase and Firebird - see more details about our migration service here - and they went fine.
Below you can find the table with the list of differences between the latest versions: Firebird 3.0 and InterBase 2017.
| Differences between Firebird and InterBase |
|---|
| Features |
| — |
| SQL (DML and DDL) |
| Cursor stability (correct INSERT FROM SELECT) |
| Scrollable (bi-directional) cursors |
| Execute Statement |
| Execute Statement On External (queries to external Firebird databases) |
| Autonomous transactions |
| Derived tables (SELECT from SELECT) |
| Recursive Common Table Expressions (CTE) |
| Windows and Statistical functions |
| MERGE |
| RETURNING clause for insert/update/delete |
| Triggers on connect/disconnect |
| Triggers on transactions start/commit/rollback |
| Triggers for DDL |
| Regexp support for SUBSTRING |
| Boolean datatype |
| BIGINT datatype |
| PSQL functions |
| External procedures, functions, triggers ( Java) |
| Nested procedures and functions |
| Deterministic functions |
| Context variables in namespaces SYSTEM, USER_SESSION and USER_TRANSACTION |
| Packages (procedures and functions) |
| Exceptions with parameters |
| IDENTITY column |
| RECREATE (combination of CREATE or ALTER) |
| UTF8 support |
| Unicode case-insensitive search support |
| Identifier length |
| COMPUTED BY indices (on expression) |
| Architecture/Administration |
| SMP SuperServer (multi-core support) |
| Classic (instance per connect) |
| SuperClassic |
| Multiple instances (at different ports) |
| Databases aliases |
| Re-routing between server instances |
| Write-ahead log (WAL) |
| Point-in-time-recovery |
| Parallel index creation during restore |
| Incremental backup |
| System monitoring tables |
| 64-bit client and server |
| Embedded version |
| Embedded for Android (mobile) |
| Embedded for iOS (mobile) |
| ChangeViews ( what is it?) |
| Wire compression |
| Network protocol improvements for high-latency networks (for SQL queries through internet) |
| Server-level replication (native) |
| Trace and audit |
| Online database validation |
| Security |
| Security database |
| Users in the database |
| Database encryption |
| Column encryption |
| Multiple encryption keys |
| Wire encryption |
| DDL user rights |
| Manage users via SQL |
| UDF and built-in functions |
| User Defined Functions |
| SDF aka Server Defined Functions (faster than UDF) |
| Drivers and client libraries support |
| Java |
| .NET |
| PHP |
| Python |
| ODBC |
| Node.JS/TypeScript |
| Golang |
| Yii2 |
| Ruby |
| Perl |
| Erlang |
| QT |
| Licensing/Prices |
| Price per server (unlimited connections) |
| Community support |
| Professional support, per server |
| Recovery, monitoring, trace/audit, optimization, native replication tools |
Contact us
Do you have any questions? Don’t hesitate to contact us by email!