Firebird is a relational database offering many ANSI SQL standard features that runs on Linux, Windows, and a variety of Unix platforms. Firebird offers excellent concurrency, high performance, and powerful language support for stored procedures and triggers.
Firebird is a fully featured and powerful RDBMS. It can handle databases from just a few KB to many Gigabytes with good performance and almost free of maintenance!
Below is a list of some of the Firebird's major features:
- Full support of Stored Procedures and Triggers
- Full ACID compliant transactions
- Referential Integrity
- Multi Generational Architecture
- Very small footprint
- Fully featured internal language for Stored Procedures and Triggers (PSQL)
- Support for External Functions (UDFs)
- Little or no need for specialized DBAs
- Almost no configuration needed
- Large user community
- Optional single file embedded version
- Dozens of third party tools
- Careful writes - fast recovery, no need for transaction logs!
- Many ways to access your database
- Native support for all major operating systems
- Incremental Backups
- 64bits builds available
- Full cursor implementation in PSQL
- Monitoring tables
- Connection and Transaction Triggers
- Temporary Tables
Support was added for fast/low-latency “TCP Loopback Fast Path” functionality introduced in Windows 8 and Server 2012.
It is now possible to filter out info and warnings from the trace log.
Enhanced control capability when sharing the database crypt key between Superserver attachments.
The physical numbers of frequently used data pages are now cached to reduce the number of fetches of pointer pages.
A read-only transaction will no longer force write the Header\TIP page content to disk immediately after a change. This improvement gives a significant performance gain where there are numerous light read-only transactions. At this stage, it affects only servers in SS mode. For CS and SC it is more complex to implement and should appear in Firebird 4.0.
The database name was made available to an encryption plug-in.
libfbclient.so was compiled for Android (x86/x86-64/arm64).
Nesting of keys in a plug-in configuration was enabled.
The Linux code is now built with --enable-binreloc and an option was included in the installer script to install in locations other than /opt/firebird.
For Trace, a filter has been provided to INCLUDE / EXCLUDE errors by their mnemonical names.
Android port (arm32).
A port was done and tested for Linux on the ancient Motorola 680000 CPU platform to satisfy some requirement from Debian.
Support has been added to enable SELECT expressions to be valid operands for the BETWEEN predicate.
Diagnostics form gstat were unclear when a damaged page in DB file appeared encrypted.
It was not possible to create a connection for events processing.
Creating SRP SYSDBA with explicit admin (-admin yes in gsec or grant admin role in create user) was creating two SYSDBA accounts.
Performance for NULLs filtering inside a navigational index scan was poor.
The setting 'Restrict UDF' for configuration parameter UdfAccess was ineffective because of fbudf.so being dynamically linked against libc.
Problems with dbcrypt key transfer.
Trace INCLUDE_FILTER with [[:WHITESPACE:]]+ would not work when a statement was issued that contained a newline character.
An access violation would occur in fbclient when reading a BLOB stored in incompatible encoding.
Bugcheck 167 (invalid SEND request).
When attempting to migrate a database from Firebird 2.5.2 to 3.0.1, gbak restore would always crash at the end.
A segmentation fault would occue when the engine's dynamic library was unloaded right after closing worker threads (GC and/or cache writer).
Bugcheck oocurred when creating a view on a table that has a column with character set NONE, database default charset is UTF8, and the default collation is UNICODE.
EXECUTE STATEMENT <e> when <e> starts with '--' (comment) issues “Unexpected end of command” error with a wrong column number.
Classic Server suffered a performance regression: too much time was being spent during context switches.
The error “Decompression overran buffer” could occur after rollback. It affected all platforms but would appear particularly on Windows Superserver, when GCPolicy was set to 'Combined' or 'Cooperative' and CpuAffinityMask was configured to more than a single core.
Performance degradation in FB 3.0.2 compared to FB 2.5.7.
Error restoring on FB 3.0 from FB 2.5 backup: bugcheck 221 (cannot remap).
Dependencies were not stored when certain types of construction were used in subroutines.
Optimization was poor for some operations with views containing subqueries.
BUGCHECK 179 (decompression overran buffer) or an unexpected lock conflict could happen during back-out of record versions.
isql would crash with corrupt memory when statement length exceeded 10 MB.
Plug-in manager was failing to provide the appropriate config information when the name of the configuration file was set in plugins.conf.
Dependencies in PSQL packages were not being recognised.
An SQL statement longer than 10MB could be processed (truncated) incorrectly.
Regression: A (select from view with nested view) query could not be executed.
Regression: a client application could hang or throw an access violation on selecting from multiple threads using one embedded connection.
Regression: A BOOLEAN state as a parameter for a search condition was incorrectly rejected as invalid.
Regression: A CASE expression with more than 255 conditions was being rejected.
An assertion was exhibited on Windows in CachedMasterInterface::set.
UDFs declared with large varchars were taking excessive time to execute.
BETWEEN operand/clause was not supported for COMPUTED BY columns -- “feature is not supported”. Now it is.
An old bug could occasionally cause a segmentation fault in Classic when the structure of a table with triggers was modified (DDL) while another attachment was preparing a request to work with that table. In rare cases, pointers to the old triggers were cached by the request compiler and the fault would occur the next time they were used.
A load test was hanging the server.
The engine could hang if an automatic sweep was starting during a database shutdown.
(Old bug) Circular dependencies between computed fields would crash the engine.
Issues with the function snprintf (in autoconfing_msvc.h) and user-defined literals in VS 2015 (MSVC 14).
New API - MessageMetadata's getScale() was returning INTEGER, while MetadataBuilder's setScale() expected unsigned.
Classic Server was limited to 64 connections when using systemd init scripts
A database on an NFS share was unavailable when accessed using the mount point path.
Connections were failing due to dead NFS mount points.
Trace was duplicating ascii_char(13) in its output on Windows.