Administration
- Real-time Firebird – Monitor for Firebird – Server 2.5/3.0/4.0
- IBEasy+
- FlameRobin
- Firebird Editor Pro
- FirebirdWebAdmin
- TurboBird
- IB LogManager
- Marathon
- FenixSQL
- ibWebAdmin
- FB Config
- DBManager
- DBOne 2005
- FBExplorer
- Firebird Database Manager
- FSQL
- IB_SQL
- IBAdmin
- IBOConsole
- IBQueryEditor
- Interbase Query
- Nagios Plugin for Firebird
- SQuirreL SQL Client
API
App Development
Architecture
Backup
- Firebird Database Backup
- Firebird Database Backup
- Gbak Scheduler
- Firebird-InterBase Backup Scheduler (FIBS)
- Time To Backup
- Fastest method to create a backup and sweep the database
BLOBs
- Out-of-memory failure with BLOB
- BLOBs, DISTINCT and GROUP BY
- Why Blob concatenation consumes memory?
- BLOB segment size: What it is and is it needed when saving BLOBs?
- How to get the length of a BLOB
- Blob Filter Sample Code
- Sharing BLOB values among several records
- BLOB conversion
- Blob segment size and Filesystem block size
- InterBase, Firebird and Blobs - A Technical Overview
- Using Stream Blobs
- The Story of the Blob
BLR
Books
- Firebird Book (2nd Edition)
- The Firebird Book II : a Reference for Database Developers
- Interbase 7 Desenvolvendo e Administrando Banco de Dados
- Firebird 1.5
- The IBExpert Book - Tools for Database Developers
- Firebird Essencial
- The Firebird Book: a Reference for Database Developers
- InterBase and Firebird
- Database Development with InterBase
- Yet Another Open Source Database. Firebird RDBMS
- Firebird - The Third Open Source Database
- InterBase and Firebird Administration and Practice
- The InterBase World. Architecture, administration and development with InterBase, Firebird and Yaffil
- Relational Databases en SQL
- Advanced InterBase - Open Source Versions 6.x
- Delphi 6 Client/Server with Firebird/InterBase - POS and Supply Management Application's
- Firebird and InterBase 6.0 Client/Server with Delphi 6 - Advanced Topics
- Client Server Applications with Delphi 6 and InterBase 6 - A Practical Approach
- Developing with Borland Delphi 6 and InterBase 6
- InterBase 6 - Developer's Guide
- InterBase Database Development with Delphi
- InterBase Database with Delphi
- InterBase - Learn Fast
- InterBase with Delphi - Learn Fast
C/C++
Character Sets
- Using Accent Insensitive Collation has significant impact on performance
- How to change database character set
- Does collation affects index size?
- How to change the collation of a field without dropping and recreating it
- How to convert a large database from UNICODE_FSS to UTF8
- Understanding character sets
Cluster
COBOL
Community
Configuration
- How to Configure Firebird Classic to use systemd
- Microsoft Windows - Forced Writes ON or OFF?
- Firebird vs Windows: file-system caching issue
- Forced Writes?
- Lesson about the FileSystemCache on 64bit Windows
- Lesson about the size of temporary disk space
- How to configure local protocol for work with multiple Firebird installations
- Process Priority Level
- Configuring Firebird for Your Application
Connectivity
- IBProvider (OLE DB Driver)
- Rust Firebird Client
- Erlang Firebird client library
- django-firebird
- FDB
- firebird-driver
- Pyfirebirdsql
- Firebird driver for Go (golang)
- IBX For Lazarus (Firebird Express)
- Node.js Firebird Drivers (Firebird 3.x/4.x)
- firebird_fdw
- IBX (IB Express)
- Firebird: PHP Driver
- Python with Firebird: FDB Driver 101
- ZEOS
- Database Parameter - isc_dpb_utf8_filename
- node-firebird
- IBObjects
- Firebird connector for Yii2 framework
- DBD-Firebird
- dbExpress
- Devart ODBC Driver
- IBDAC
- ADOdb
- Easysoft InterBase ODBC Driver
- IBPP
- SQLAPI++
- UIB (Unified InterBase)
- FireRuby
- SOCI
- Jaybird: Is there any way to set socket timeouts?
- AnyDAC
- Fbclient
- PEAR - MDB2
- Rubyfb
- Firebird drivers for Python
- Jaybird - org.firebirdsql.jdbc.FBSQLException: GDS Exception. 15. No message for code 15 found.
- Ambiguous field, problem with Borland Database provider
Control Panel Applet
Corruption
Data modelling
Data types
- Design suggestion for GUID columns
- How to convert a string to a number in a where clause without errors
- How to create random dates?
- Performance comparision for primary keys - int vs. varchar, and more
- Why table of type "key-value" takes so much space on disk?
- How to store an unusual data type
- Working days between two dates
- How to use Firebird ARRAY type?
- How do convert or display the date or time as string?
- Lesson about inreasing scale on NUMERIC column
- GUID or BIGINT? That's the question!
- Changes in the result type of RPAD() and LPAD()
- How to add minutes to a TimeStamp value
- Delphi and FLOAT vs. DOUBLE PRECISION
- How to deal with an overflow when multiplying decimals
- Data type for small binary data
- Lesson about dates and timezones
- Lesson about data alignment in External Tables
- How to get a string date from a datetime field
- Firebird 2.1 is more strict about number formats
- Firebird Dialect 3 Decimal Number Limits
- Can't index a 1k+ utf-8 column
- Allowing Space for Unicode
- UUID (octets) to something readable
- Understanding character sets
- System date and time into a stored procedure
- Alter column to shorter width
- Ignore Seconds when getting unique list of times
- Getting time with milliseconds
- Valid Firebird date format strings
- Using UUDIs/GUIDs as Primary Keys
- Rounding variant
- Multiplication and Data Types
- A Comparison of SQL Server and InterBase Datatypes and Some Other Issues
- InterBase 6.0 SQL Dialects
Database
- Database Parameter - isc_dpb_utf8_filename
- How to Size a Firebird Database
- The Interpretation of Database Statistics
- Working with very large Firebird databases
- TMP space required during restore
- Why DROP TABLE can sometimes take very very long time
- Is it safe to copy a database between Linux/Windows/32/64-bit?
- How to get the last date a database was restored
- Database owner
- Secure DB only for the owner
- Determining database ODS (pre 11.1)
- Database on a virtual Drive created with subst
- How to shred records
- Transportable Firebird Databases
- What is the best page size?
- An easy way to see how many database pages are being used to track old transactions
- Detecting, correcting, and preventing database corruption
- Understanding (and upgrading?) ODS
- Too Many Versions
- InterBase has an (alleged) 2GB Database size limit
- Database statistics
Database repair
Database validation
Debugging
Delphi
Development
- Database Workbench
- Red Expert
- Hopper
- Database .NET
- DB Explorer For Firebird Databases
- FirebirdDbComparer
- Firebolt
- IBExpert
- Firebird Maestro
- Firebird Stored Procedure Generator
- BlazeTop
- Database Comparer
- DbVisualizer
- EMS SQL Manager for InterBase/Firebird
- IBDataWorks
- InterBase Description tool
- Interbase/Firebird Development Studio
- MyGeneration
- SQLeo Visual Query Builder
Downgrade
Embedded Engine
- Embedding 3.x into a Windwos/Mac .NET Application
- Why you should check the stack size when you're using embedded Firebird engine
- Stack size in your application affects embedded Firebird
- Embedded Firebird on MacOSX
- Embedded vs. Server
- Embedded version run on a CD
Encryption
Erlang
Event notifications
Event processing
External Tables
- Lesson about data alignment in External Tables
- External file structures
- External Tables
- Limit for External Tables
- External Tables and EOL
Firebird Butler
- The Firebird Butler, An Introduction
- Firebird Butler in Python part I, Introduction to Saturnin SDK
- Firebird Butler in Python part II, Introduction to Saturnin
Firebird Development
- RFC: Tablespaces
- Tracking Down Crashes on Linux
- Building Firebird V1.5 Classic on HPUX 11
- The Rough Guide to building Firebird 1.5 on MacOSX
- Y-Valve Architecture
- Request Handles and What They Do
- Adding New Messages to msg.gdb
- Firebird Coding Style Guides
Firebird Internals
- Meaning of BACKOUTS, PURGES and EXPUNGES in monitoring tables
- Limits of the Event Parameter Buffer?
- How to write an internal UDF function
- Understanding the Firebird Optimizer and Plans
- Performance comparision for primary keys - int vs. varchar, and more
- Why table of type "key-value" takes so much space on disk?
- New Pseudocolumn RDB$RECORD_VERSION
- Orphans, Corruption, Careful Write, and Logging
- Threading in Firebird and the Future
- How does the optimizer determines join order?
- Lesson about compound Indexes
- How many pages must engine read to fetch a data record?
- Trouble with RDB$ADMIN?
- The Mystery of the RDB$DB_KEY
- Practical Use of the RDB$DB_KEY
- The Interpretation of Database Statistics
- Lesson about index direction
- Stack size in your application affects embedded Firebird
- RDB$USER_PRIVILEGES vs. RDB$SECURITY_CLASS
- The life cycle of a Firebird SQL statement
- Do inserts in FB benefit from ordered or sequential Primary Keys?
- Fragmented records may affect sweep performance
- Lesson about lock resolution, deadlocks and history
- What is the effective difference between key elements orderings?
- How table cardinality may affect query prepare times
- Explanation of the maximum key size limit
- How to find out whether a field has set a default value
- Lesson about table inserting into itself
- A Lesson about Firebird databases on RAW devices
- BLOB segment size: What it is and is it needed when saving BLOBs?
- Why does Firebird write so much data for simple select queries?
- A Lesson about BLR and ODS
- How to detect computed columns
- What is the maximum number of rows per table in Firebird 2.1 and up?
- Forced Writes?
- Does a newly added column cause all records to be touched - what happens?
- 101 about Firebird indices
- Lesson about hash table and Firebird performance
- How does the foreign key implementation work?
- Table structure for efficient storage
- Lesson about Indices
- Atomicity of UPDATEs
- Size of NULL columns
- Lesson about concurrent updates
- Lesson about the size of temporary disk space
- How the Validation Tools Work
- Interesting lesson about DDL and commit
- Lesson about dates and timezones
- Performance issues on Intel CPUs
- Lesson about data alignment in External Tables
- Lesson about implicit parameter length
- Transaction Counters in monitoring tables vs. header page
- Firebird Dialect 3 Decimal Number Limits
- Sharing BLOB values among several records
- A Lesson about Sort was: Sort table depending on the select list instead of depending on the order-by key
- Lesson about "Careful Write"
- Table ID limit
- Prepared statements - use them or not?
- Questions on mon$tables
- Fetch multiple records in a single call
- Why "cooperative" garbage collection?
- External file structures
- Significance of join order
- Oldest Transaction greater than Oldest Active?
- Order of execution of SQL statements
- Fill ratio when doing a restore
- How do I know what the ideal page is size for my database?
- An easy way to see how many database pages are being used to track old transactions
- Max Table size record count
- Primary Keys / Indexes
- Limits of the Firebird Database
- Record versions: consistent read, concurrency control, and undo log
- Understanding (and upgrading?) ODS
- How much space does a NULL take?
- High CPU consumption
- Oldest Snapshot and Performance Issues
- Why is CommitRetaining bad?
- How to determine whether a column is computed
- Missing pointer page
- Violation of UNIQUE KEY constraint during UPDATE
- Strange performance on a VIEW
- Database Header page structure
- Domains inside Stored Procedures
- Firebird Indexing
- Database statistics
- Careful-write documentation
- Blob segment size and Filesystem block size
- Question about Record Versioning
- OSRI Architecture
- Y-Valve Architecture
- InterBase, Firebird and Blobs - A Technical Overview
- Lock Management in Firebird
- A not-so-very technical discussion of Multi Version Concurrency Control
- Conceptual Architecture for InterBase/Firebird
- Request Handles and What They Do
- Adding New Messages to msg.gdb
- Understanding the Assumptions Behind InterBases Technology
- Explanation of Deadlocks
Firebird Limits
- What is the max. size of event name?
- Is there a limit for maximum number of concurrent connections?
- Updated lesson about max. index key size
- Explanation of the maximum key size limit
- A Lesson about Implementation Restrictions
- What is the maximum number of rows per table in Firebird 2.1 and up?
- Maximum number of active connections
Firebird plugins
FreeBSD
Fulltext search
- More on - How to implement the full text search using only what PSQL offers
- Sphinx Full-text search and Firebird
- Fulltext Search for Firebird using DotLucene
GBAK
- Problems running gfix and gbak from windows service
- Can I use any version of gbak to backup/restore any version of Firebird database?
- Gbak and Firebird Versions
GFIX
Go (golang)
GPRE
GSTAT
Guide
- Migration to newer versions of Firebird
- Using KEEPALIVE-sockets to avoid 10054 errors
- Converting data to Firebird by Writing "Native" External Files
- Firebird Null Guide
- Firebird Coding Style Guides
- Introduction to InterBase Stored Procedures and Triggers
Hardware
History Records
- What's happening with Firebird and InterBase?
- Whats Happening With Firebird?
- Whats Happening to InterBase?
- Ann Harrison's reminiscences on InterBase's beginings
- How Jim Starkey remembers it
- Further recollections from Ann Harrison
- Datatrieve and Wombats
- The Story of the Blob
- InterBase Rises
- InterBase Flap Could Fork Code
- The451 - Disappearing Inprise spawns InterBase
- The451 - Will Borland let InterBase go?
- Inprise Spins Out Database Division for Open Source Future
- What Open Source Means to You
How To
- How to write and build UDRs
- How to get the value for database linger parameter
- How to measure the effectiveness of incrementing page buffers
- How to always select exact number of rows
- How to get new (FB 3) advanced plan output in your application
- How to convert a string to a number in a where clause without errors
- How to retrieve values not present in table
- Creating a conditional "order by" statement
- How to create random dates?
- How to calculate Median, Mode and Range?
- More on - How to implement the full text search using only what PSQL offers
- How to discover which architecture is installed on Windows
- How to get a list of tables in dependency order
- How to Extract Filename from file path inside a stored procedure
- How to convert a database down from v2.5 to v1.5?
- How to store an unusual data type
- How to install system wide fbembed.dll on Windows?
- How to avoid columns with total values (summarized from multiple rows)
- How to copy table into newly created one using stored procedure?
- How to use stored procedure for a computed field
- How to find all records on all tables that violate constraints?
- How to check in trigger code whether action was caused by cascade or user
- How to change database character set
- How to improve performance for range search
- How to create conditional DROP statements in SQL scripts
- How to determine whether connection was made via alias
- How to compare content of two databases
- How to list tables and field wich use the primary key from other table as FK
- How to estimate temporary space needed for index creation?
- How to install SuperClassic with custom Inno Setup Installer
- How to find out whether a field has set a default value
- How to mark every inserted/updated record by increased number, generated at commit time
- How to put an entire Database in memory using cache?
- How to detect computed columns
- How to count recors in more efficient way
- How to enforce that table has exactly only one row
- How to set up Firebird to accept connections only from localhost
- How to get the length of a BLOB
- How can I use gstat to find the size of table?
- How to Identify 64-bit Firebird
- How to get number of rows for all tables
- How to use variable cursors in PSQL
- How to select a first, second and third child record to a master
- How to create users under a different account than SYSDBA in FB2.5
- How to get the smallest number that is missing in a sequence
- How to add minutes to a TimeStamp value
- How to change the collation of a field without dropping and recreating it
- How to alter column widths when you don't know the column names
- How to deal with an overflow when multiplying decimals
- How to check whether a unique constraint is defined
- How to get the last date a database was restored
- How To Analyse and Repair a Corrupted Database
- How to Lock a Record in InterBase/Firebird
- How to convert a large database from UNICODE_FSS to UTF8
- How to configure local protocol for work with multiple Firebird installations
- How to get a string date from a datetime field
- An example of how to change row data into columnar data
- How to find a record in a table that has a null value where the field does not allow a null value
- Running two or more versions of Firebird simultaneously under Windows
HP-UX
Index
- Beware useless indices on expressions
- Updated lesson about max. index key size
- Lesson about compound Indexes
- Lesson about index direction
- Do inserts in FB benefit from ordered or sequential Primary Keys?
- What is the effective difference between key elements orderings?
- Does collation affects index size?
- How to estimate temporary space needed for index creation?
- Insert performance may depend on index key type
- A Quick Start Guide to Index Optimisation
- 101 about Firebird indices
- Lesson about Indices
- Index with two key values
- What is better : null or empty string in index?
- Can't index a 1k+ utf-8 column
- Firebird 2.1.x and the use of indices for IN predicate optimalization
- Problem with Index Key size
- Primary Key and Unique Index
- Best way to update index statistics on new database
- Corrupted Index
- How to know when an index has become unbalanced?
- Updating index statistics
- Using UUDIs/GUIDs as Primary Keys
- Primary Keys / Indexes
- Why rebuild your indices
- Firebird Indexing
- Database statistics
Installation
- How to install system wide fbembed.dll on Windows?
- How to install SuperClassic with custom Inno Setup Installer
- Minimum Firebird Client Installation on Windows
Interview
- Interview with FrontRange
- Interview with Jim Starkey from InterBase World
- Interview with Paul Beach from InterBase World
- Interview with Ann Harrison from InterBase World
ISQL
Japan
Java
- Jaybird: Is there any way to set socket timeouts?
- Jaybird - org.firebirdsql.jdbc.FBSQLException: GDS Exception. 15. No message for code 15 found.
JavaScript
Linux
- How to Configure Firebird Classic to use systemd
- How to Install the Firebird ODBC Driver on Linux
- Slow I/O performance on Linux? Look at the filesystem!
- Firebird on Linux
- Choosing a File System on Linux for Firebird
- Tracking Down Crashes on Linux
- Linux Classic Server User Limit
- Building Firebird on Windows and Linux
- Firebird on Linux
Lua
MacOS
Magazine
Matadata
Mathematics
Media
- The Free Database Niche
- The Free Database Niche - Response
- Interview with FrontRange
- What's happening with Firebird and InterBase?
- Whats Happening With Firebird?
- Whats Happening to InterBase?
- InterBase Rises
- InterBase Flap Could Fork Code
- The451 - Disappearing Inprise spawns InterBase
- The451 - Will Borland let InterBase go?
- Inprise Spins Out Database Division for Open Source Future
Metadata
- How to get a list of tables in dependency order
- Do global temporary tables have performance advantages over usual tables?
- Some methods how to assign version to database schema
- Why you can't update metadata and data in single transaction
- How to create conditional DROP statements in SQL scripts
- How to list tables and field wich use the primary key from other table as FK
- How to drop a view only if it exists?
- How to find out whether a field has set a default value
- How to detect computed columns
- Does a newly added column cause all records to be touched - what happens?
- How to change the collation of a field without dropping and recreating it
- How to check whether a unique constraint is defined
- Table structure for efficient storage
- Interesting lesson about DDL and commit
- Lesson Two: Querying metadata was: Fastest way to query tables and views and return no records
- Table ID limit
Migration
- Migration to newer versions of Firebird
- InterBase DataPump
- dbMigration .NET
- Firebird 4 Migration Guide
- Upgrading from Firebird 1.5 to 2.5 and beyond
- FBClone
- Firebird Database Converter
- How to Migrate Users from Firebird 2 to Firebird 3
- DBConvert
- Advanced Data Export Component Suite
- FBCopy
- FBExport
- A story of project conversion
- Converting data to Firebird by Writing "Native" External Files
- Migrating a PHP application to Firebird
- Bulk Loading for FB
- A Comparison of SQL Server and InterBase Datatypes and Some Other Issues
Miscellaneous
Monitoring
- Meaning of BACKOUTS, PURGES and EXPUNGES in monitoring tables
- Using monitoring tables & trace/audit for system analysis
- Oldest Active Transaction and MON$
- Audit and Trace Services in Firebird V2.5
- Transaction Counters in monitoring tables vs. header page
- Questions on mon$tables
Monthly News
- Development News - September 2024
- Development News - August 2024
- Development News - July 2024
- Development News - June 2024
- Development News - May 2024
- Development News - April 2024
- Development News - March 2024
- Development News - February 2024
- Development News - January 2024
- Development News - December 2023
NBACKUP
- Database on a RAM-disk, shadows and NBackup
- The Chequered Career of nBackup
- NBackup level 0 vs. file copy
.NET
Network
- Using KEEPALIVE-sockets to avoid 10054 errors
- How to configure local protocol for work with multiple Firebird installations
ODBC
ODBC/OLE DB
ODS
- Why Firebird never automatically upgrades database ODS
- A Lesson about BLR and ODS
- Determining database ODS (pre 11.1)
- Understanding (and upgrading?) ODS
OLAP
Optimization
- Understanding the Firebird Optimizer and Plans
- How does the optimizer determines join order?
- Required information for Firebird database performance optimization
- A Quick Start Guide to Index Optimisation
- How to opimize a query with a field that has been cast
- How to know when an index has become unbalanced?
- What is the best page size?
- How do I know what the ideal page is size for my database?
- Weird query execution plan
- Tips for Improving InterBase Server Performance
Paper
- Using TPC-C to study Firebird performance
- Data and Information
- Aggregate Tables with Firebird
- Transportable Firebird Databases
- Firebird Databases as the Back-end to Enterprise Software Systems
- First steps in performance tuning
- Firebird (yet) another Open Source Database
- Conceptual Architecture for InterBase/Firebird
- Understanding the Assumptions Behind InterBases Technology
- Explanation of Deadlocks
Pascal/Delphi
- IBX For Lazarus (Firebird Express)
- IBX (IB Express)
- ZEOS
- IBObjects
- dbExpress
- IBDAC
- UIB (Unified InterBase)
- AnyDAC
Performance
- How to measure the effectiveness of incrementing page buffers
- Using Accent Insensitive Collation has significant impact on performance
- Firebird 2.5 and 3.0 performance comparison
- Performance comparision for primary keys - int vs. varchar, and more
- Using TPC-C to study Firebird performance
- Microsoft Windows - Forced Writes ON or OFF?
- Is it possible to store Firebird DB file on a NAS?
- Slow I/O performance on Linux? Look at the filesystem!
- Required information for Firebird database performance optimization
- Do global temporary tables have performance advantages over usual tables?
- How to improve performance for range search
- Fragmented records may affect sweep performance
- How table cardinality may affect query prepare times
- What is the fastest transaction isolation level ?
- Insert performance may depend on index key type
- Why DROP TABLE can sometimes take very very long time
- Forced Writes?
- Lesson about hash table and Firebird performance
- Fastest method to create a backup and sweep the database
- Performance of events
- Performance issues on Intel CPUs
- ORDER BY with LPAD is too slow
- Reduce query / transaction priority
- SUM performance
- Backup and restore elapsed time
- Why "SELECT FIRST 1 ..." and "EXISTS ( SELECT * FROM ... )" are so slow in a big database
- First steps in performance tuning
- High CPU consumption
- Oldest Snapshot and Performance Issues
- Concurrency issues
- Strange performance on a VIEW
- Firebird uses 100% CPU
- Quick restore from backup with Classic
- Tips for Improving InterBase Server Performance
Perl
PHP
- Firebird: PHP Driver
- Firebird connector for Yii2 framework
- DbFace
- ADOdb
- PEAR - MDB2
- Migrating a PHP application to Firebird
PSQL
- Updatable Firebird Views
- Functions with PSQL in Firebird 3
- Advantages of using CURSOR?
- What are the explicit cursors good for?
- How to use variable cursors in PSQL
- Lesson about PSQL variables
- Semantics of "for select"
- DBKEY or cursor in PSQL
- How to ignore exceptions in PSQL
Python
- django-firebird
- FDB
- firebird-driver
- Pyfirebirdsql
- Python with Firebird: FDB Driver 101
- Fun with Firebird and Python
- Examples for Fun with Firebird and Python
- Firebird drivers for Python
- Making your own Firebird PowerTools with Python
- Making your own Firebird PowerTools with Python
QA
RAID
Repair
Replication
Restore
RFC
Roadmap
Ruby
Rust
Saturnin
- Firebird Butler in Python part I, Introduction to Saturnin SDK
- Firebird Butler in Python part II, Introduction to Saturnin
Security
- Simplifying GRANT USAGE
- How to Migrate Users from Firebird 2 to Firebird 3
- Trusted Autentication and multi-word group/role names
- Trouble with RDB$ADMIN?
- RDB$USER_PRIVILEGES vs. RDB$SECURITY_CLASS
- How to set up Firebird to accept connections only from localhost
- Trusted authentication problem - little space for user names
- Changing the owner of a table or stored procedure
- How to create users under a different account than SYSDBA in FB2.5
- Database owner
- Secure DB only for the owner
- How to let an non-SYSDBA user add and delete USERS
- Firebird and Security
- Firebird File and Metadata Security
- Securing your Firebird/InterBase Installation
Server Management
Shadow
SQL
- SQL to split delimited text field into separate strings
- How to get the value for database linger parameter
- How to always select exact number of rows
- How to convert a string to a number in a where clause without errors
- BLOBs, DISTINCT and GROUP BY
- Alternative to MySQL ELT() function
- How to retrieve values not present in table
- Creating a conditional "order by" statement
- Simplifying GRANT USAGE
- Inserting into a table with only an identity column
- How to calculate Median, Mode and Range?
- SQL best practices
- How to get a list of tables in dependency order
- Updatable Firebird Views
- Understanding the Firebird Optimizer and Plans
- New Pseudocolumn RDB$RECORD_VERSION
- Working days between two dates
- Equality on NULL column values
- How to avoid columns with total values (summarized from multiple rows)
- How to find all records on all tables that violate constraints?
- The Mystery of the RDB$DB_KEY
- Practical Use of the RDB$DB_KEY
- Efficient way to manage hierarchies in database
- How to improve performance for range search
- The life cycle of a Firebird SQL statement
- Query to get information about the current transaction
- Is it possible to enforce uniqueness among non-null values in nullable column?
- Lesson about table inserting into itself
- Problem passing long parameter values?
- Insert performance may depend on index key type
- Firebird 3 Windowing Functions
- How to count recors in more efficient way
- How to get number of rows for all tables
- Changes in the result type of RPAD() and LPAD()
- How to select a first, second and third child record to a master
- How to get the smallest number that is missing in a sequence
- Atomicity of UPDATEs
- Concatenated fields
- Lesson about implicit parameter length
- An example of how to change row data into columnar data
- How to find a record in a table that has a null value where the field does not allow a null value
- A Lesson about Sort was: Sort table depending on the select list instead of depending on the order-by key
- Lesson Two: Querying metadata was: Fastest way to query tables and views and return no records
- Example of using first..skip in a stored procedure
- Age Calculation
- Firebird 2.1.x and the use of indices for IN predicate optimalization
- RunSum in Firebird
- ORDER BY with LPAD is too slow
- How to identify the Firebird version via SQL
- Alter column to shorter width
- SUM performance
- Ignore Seconds when getting unique list of times
- Significance of join order
- How to opimize a query with a field that has been cast
- Using one prepared statement for updating a different field
- How to alter a table column with dependencies to use a domain
- Order of execution of SQL statements
- What is the use of the "for update" clause
- Problem with not in queries in Firebird 2.0 RC3
- Why "SELECT FIRST 1 ..." and "EXISTS ( SELECT * FROM ... )" are so slow in a big database
- How ON DELETE CASCADE works, and why
- Absolute value
- Inserting rows with cyclic referential dependencies
- String equality match pitfall
- The First to select
- UPDATE Bug ?
- How to determine whether a column is computed
- Ambiguous field, problem with Borland Database provider
- Domains inside Stored Procedures
- Weird query execution plan
- Explicit Join Semantics In Firebird
- InterBase 6.0 SQL Dialects
SQL Dialect
Stored Procedures
- How to Extract Filename from file path inside a stored procedure
- How to copy table into newly created one using stored procedure?
- How to use stored procedure for a computed field
- Do you want to Inactivate / Activate a trigger from stored procedure?
- Concatenated fields
- Example of using first..skip in a stored procedure
- Looping Stored Procedure
- System date and time into a stored procedure
- Version Control of Stored Procedures/Triggers
- Domains inside Stored Procedures
- Introduction to InterBase Stored Procedures and Triggers
Support
Support Gem
- Meaning of BACKOUTS, PURGES and EXPUNGES in monitoring tables
- Design suggestion for GUID columns
- SQL to split delimited text field into separate strings
- Out-of-memory failure with BLOB
- How to get the value for database linger parameter
- How to measure the effectiveness of incrementing page buffers
- How to always select exact number of rows
- How to get new (FB 3) advanced plan output in your application
- How to convert a string to a number in a where clause without errors
- BLOBs, DISTINCT and GROUP BY
- Alternative to MySQL ELT() function
- How to retrieve values not present in table
- Creating a conditional "order by" statement
- How to create random dates?
- Inserting into a table with only an identity column
- How to calculate Median, Mode and Range?
- Using Accent Insensitive Collation has significant impact on performance
- Embedding 3.x into a Windwos/Mac .NET Application
- How to discover which architecture is installed on Windows
- How to get a list of tables in dependency order
- What is the max. size of event name?
- Firebird 2.5 and 3.0 performance comparison
- Problems running gfix and gbak from windows service
- Performance comparision for primary keys - int vs. varchar, and more
- How to Extract Filename from file path inside a stored procedure
- Some caveats of autonomous transactions in database triggers
- How to convert a database down from v2.5 to v1.5?
- Is there a limit for maximum number of concurrent connections?
- Why table of type "key-value" takes so much space on disk?
- Why Blob concatenation consumes memory?
- Beware useless indices on expressions
- What is the scope of uniqueness constraint?
- Error messages on client shows only templates
- How to store an unusual data type
- Working days between two dates
- Equality on NULL column values
- How to install system wide fbembed.dll on Windows?
- Strange OIT/OAT/OST/Next Transaction numbers
- Updated lesson about max. index key size
- Is it possible to store Firebird DB file on a NAS?
- How to avoid columns with total values (summarized from multiple rows)
- Wait vs. no-wait transactions
- How does the optimizer determines join order?
- How to copy table into newly created one using stored procedure?
- Slow I/O performance on Linux? Look at the filesystem!
- How to use stored procedure for a computed field
- Required information for Firebird database performance optimization
- Why you should check the stack size when you're using embedded Firebird engine
- How to find all records on all tables that violate constraints?
- Lesson about compound Indexes
- How many pages must engine read to fetch a data record?
- Advantages of using CURSOR?
- Trusted Autentication and multi-word group/role names
- Trouble with RDB$ADMIN?
- NBackup level 0 vs. file copy
- Lesson about index direction
- Stack size in your application affects embedded Firebird
- Do global temporary tables have performance advantages over usual tables?
- RDB$USER_PRIVILEGES vs. RDB$SECURITY_CLASS
- How to check in trigger code whether action was caused by cascade or user
- Efficient way to manage hierarchies in database
- Can I use any version of gbak to backup/restore any version of Firebird database?
- How to use Firebird ARRAY type?
- Why Firebird never automatically upgrades database ODS
- Some methods how to assign version to database schema
- How to change database character set
- Why you can't update metadata and data in single transaction
- How to improve performance for range search
- How to create conditional DROP statements in SQL scripts
- How to determine whether connection was made via alias
- Do inserts in FB benefit from ordered or sequential Primary Keys?
- Fragmented records may affect sweep performance
- Lesson about lock resolution, deadlocks and history
- What is the effective difference between key elements orderings?
- Query to get information about the current transaction
- Does collation affects index size?
- How to compare content of two databases
- How to list tables and field wich use the primary key from other table as FK
- Jaybird: Is there any way to set socket timeouts?
- How to estimate temporary space needed for index creation?
- How do convert or display the date or time as string?
- How to install SuperClassic with custom Inno Setup Installer
- Is it possible to enforce uniqueness among non-null values in nullable column?
- How to drop a view only if it exists?
- How table cardinality may affect query prepare times
- Explanation of the maximum key size limit
- Some facts about read_committed + isc_tpb_no_rec_version
- Firebird vs Windows: file-system caching issue
- What is the fastest transaction isolation level ?
- TMP space required during restore
- How to find out whether a field has set a default value
- Lesson about how to avoid deadlocks and lock conflicts
- Lesson about inreasing scale on NUMERIC column
- A story of project conversion
- Lesson about table inserting into itself
- A Lesson about Firebird databases on RAW devices
- BLOB segment size: What it is and is it needed when saving BLOBs?
- Problem passing long parameter values?
- Insert performance may depend on index key type
- Why does Firebird write so much data for simple select queries?
- How to mark every inserted/updated record by increased number, generated at commit time
- How to put an entire Database in memory using cache?
- A Lesson about BLR and ODS
- How to detect computed columns
- How to count recors in more efficient way
- Oldest Snapshot
- Why DROP TABLE can sometimes take very very long time
- A Lesson about Implementation Restrictions
- How to enforce that table has exactly only one row
- How to set up Firebird to accept connections only from localhost
- Firebird V2.1 - Error: value exceeds the range for valid dates
- Is it safe to copy a database between Linux/Windows/32/64-bit?
- Trusted authentication problem - little space for user names
- How to get the length of a BLOB
- What are the explicit cursors good for?
- Oldest Active Transaction and MON$
- How can I use gstat to find the size of table?
- Jaybird - org.firebirdsql.jdbc.FBSQLException: GDS Exception. 15. No message for code 15 found.
- Changing the owner of a table or stored procedure
- What is the maximum number of rows per table in Firebird 2.1 and up?
- How to Identify 64-bit Firebird
- GUID or BIGINT? That's the question!
- How to get number of rows for all tables
- Problem with the Windows System Cache
- A Quick Start Guide to Index Optimisation
- Forced Writes?
- Changes in the result type of RPAD() and LPAD()
- Does a newly added column cause all records to be touched - what happens?
- How to use variable cursors in PSQL
- Do you want to Inactivate / Activate a trigger from stored procedure?
- 101 about Firebird indices
- Lesson about hash table and Firebird performance
- How to select a first, second and third child record to a master
- How to create users under a different account than SYSDBA in FB2.5
- How to get the smallest number that is missing in a sequence
- How to add minutes to a TimeStamp value
- How to change the collation of a field without dropping and recreating it
- Delphi and FLOAT vs. DOUBLE PRECISION
- How to alter column widths when you don't know the column names
- How to deal with an overflow when multiplying decimals
- How does the foreign key implementation work?
- How to check whether a unique constraint is defined
- Table structure for efficient storage
- Lesson about PSQL variables
- Lesson about Indices
- How to get the last date a database was restored
- Sphinx Full-text search and Firebird
- Atomicity of UPDATEs
- Data type for small binary data
- Lesson about the FileSystemCache on 64bit Windows
- Best hard drive configuration for Firebird
- Lesson about Classic server and per-connection cache
- Size of NULL columns
- Fastest method to create a backup and sweep the database
- Lesson about concurrent updates
- Lesson about the size of temporary disk space
- Synergy between users and developers in action
- Minimum Firebird Client Installation on Windows
- Index with two key values
- Concatenated fields
- What is better : null or empty string in index?
- Performance of events
- How to convert a large database from UNICODE_FSS to UTF8
- Interesting lesson about DDL and commit
- Lesson about dates and timezones
- Performance issues on Intel CPUs
- Lesson about data alignment in External Tables
- Maximum number of active connections
- Lesson about implicit parameter length
- Database owner
- How to configure local protocol for work with multiple Firebird installations
- How to get a string date from a datetime field
- Secure DB only for the owner
- Firebird 2.1 is more strict about number formats
- How to let an non-SYSDBA user add and delete USERS
- Transaction Counters in monitoring tables vs. header page
- An example of how to change row data into columnar data
- Firebird Dialect 3 Decimal Number Limits
- Sharing BLOB values among several records
- How to find a record in a table that has a null value where the field does not allow a null value
- A Lesson about Sort was: Sort table depending on the select list instead of depending on the order-by key
- Lesson Two: Querying metadata was: Fastest way to query tables and views and return no records
- Lesson about "Careful Write"
- Semantics of "for select"
- Can't index a 1k+ utf-8 column
- Determining database ODS (pre 11.1)
- Allowing Space for Unicode
- Example of using first..skip in a stored procedure
- DBKEY or cursor in PSQL
- Table ID limit
- Age Calculation
- UUID (octets) to something readable
- Windows system clock and Firebird server
- Firebird 2.1.x and the use of indices for IN predicate optimalization
- Looping Stored Procedure
- Problem with Index Key size
- Understanding character sets
- RunSum in Firebird
- ORDER BY with LPAD is too slow
- New internal functions in Firebird 2.1 may collide with your external UDF's!
- How to ignore exceptions in PSQL
- UDF returning database file path
- System date and time into a stored procedure
- Database on a virtual Drive created with subst
- Embedded vs. Server
- Primary Key and Unique Index
- Prepared statements - use them or not?
- Questions on mon$tables
- How to identify the Firebird version via SQL
- Reduce query / transaction priority
- Fetch multiple records in a single call
- Alter column to shorter width
- Two phase recovery
- Why "cooperative" garbage collection?
- Gsec output to stderr
- Custom System Table
- Bulk collate update on system tables
- SUM performance
- External file structures
- Difference between * vs fieldname in aggregate
- Weird RDB$DB_KEY printing in ISQL
- Best way to update index statistics on new database
- Corrupted Index
- Ignore Seconds when getting unique list of times
- Significance of join order
- Linux Classic Server User Limit
- How to opimize a query with a field that has been cast
- External Tables
- Getting time with milliseconds
- FB Client DLL upgrade advice
- Version Control of Stored Procedures/Triggers
- Using one prepared statement for updating a different field
- Oldest Transaction greater than Oldest Active?
- Valid Firebird date format strings
- How to shred records
- How to alter a table column with dependencies to use a domain
- Order of execution of SQL statements
- How to know when an index has become unbalanced?
- Lock Manager Out Of Room Error
- Process Priority Level
- Updating index statistics
- CURRENT_TIMESTAMP vs. NOW
- fbserver command line options
- Renaming tables in Firebird
- Can virus-scanners interfere with Firebird?
- Backup and restore elapsed time
- Limit for External Tables
- Fill ratio when doing a restore
- What is the best page size?
- gfix -mend warning
- What is the use of the "for update" clause
- Using UUDIs/GUIDs as Primary Keys
- Problem with not in queries in Firebird 2.0 RC3
- Why "SELECT FIRST 1 ..." and "EXISTS ( SELECT * FROM ... )" are so slow in a big database
- Killing a client starting a very large query
- How do I know what the ideal page is size for my database?
- An easy way to see how many database pages are being used to track old transactions
- How ON DELETE CASCADE works, and why
- Absolute value
- Rounding variant
- Max Table size record count
- Inserting rows with cyclic referential dependencies
- Global trigger
- Embedded version run on a CD
- Multiplication and Data Types
- BLOB conversion
- String equality match pitfall
- Primary Keys / Indexes
- The First to select
- Deleting all the foreign keys in my database
- Smart backup
- Updatable views
- UPDATE Bug ?
- Data encryption
- Backup in 2.0 => Restore in previous versions?
- Understanding (and upgrading?) ODS
- Too Many Versions
- How much space does a NULL take?
- Drop primary key constraint with no name
- High CPU consumption
- Oldest Snapshot and Performance Issues
- Why is CommitRetaining bad?
- Why rebuild your indices
- Concurrency issues
- How to determine whether a column is computed
- Missing pointer page
- Violation of UNIQUE KEY constraint during UPDATE
- More about SAVEPOINTs
- Strange performance on a VIEW
- Ambiguous field, problem with Borland Database provider
- Domains inside Stored Procedures
- Firebird Indexing
- Firebird uses 100% CPU
- Database statistics
- External Tables and EOL
- Quick restore from backup with Classic
- Weird query execution plan
- Bulk Loading for FB
- Careful-write documentation
- What's the row limit/file size for a FB table?
- Blob segment size and Filesystem block size
- Question about Record Versioning
Sweep
- Fragmented records may affect sweep performance
- Fastest method to create a backup and sweep the database
Testing
Tools
- Firebird Database Backup
- Database Workbench
- Red Expert
- InterBase DataPump
- Real-time Firebird – Monitor for Firebird – Server 2.5/3.0/4.0
- Hopper
- Database .NET
- IBEasy+
- FlameRobin
- FB TraceManager
- FirebirdMonitor Tool
- dbMigration .NET
- Firebird Editor Pro
- FirebirdWebAdmin
- DB Explorer For Firebird Databases
- Bipost
- FirebirdDbComparer
- Firebolt
- FBCompare
- IBExpert
- Firebird Maestro
- DbFace
- FBProfiler
- Firebird Stored Procedure Generator
- Firebird Database Backup
- FBClone
- Firebird Database Converter
- CopyCat and CopyTiger
- TurboBird
- IB LogManager
- Marathon
- FenixSQL
- ibWebAdmin
- Gbak Scheduler
- DBConvert
- FB Config
- Advanced Data Export Component Suite
- BlazeTop
- Database Comparer
- DBManager
- DBOne 2005
- DbVisualizer
- DeZign for Databases
- EMS SQL Manager for InterBase/Firebird
- FBCopy
- FBExplorer
- FBExport
- FBReplicator
- Firebird Database Manager
- Firebird-InterBase Backup Scheduler (FIBS)
- FSQL
- IB_SQL
- IBAdmin
- IBDataWorks
- IBOConsole
- IBQueryEditor
- IBSurgeon Viewer
- InterBase Description tool
- Interbase Query
- Interbase/Firebird Development Studio
- MyGeneration
- Nagios Plugin for Firebird
- SQLeo Visual Query Builder
- SQuirreL SQL Client
- Time To Backup
- Audit and Trace Services in Firebird V2.5
- Replicating with IBReplicator 2.5
- Making your own Firebird PowerTools with Python
- Making your own Firebird PowerTools with Python
Tools. Administration
Trace
- Trace plugin
- FB TraceManager
- FirebirdMonitor Tool
- Using monitoring tables & trace/audit for system analysis
- Audit and Trace Services in Firebird V2.5
Transactions
- Understanding Firebird Transactions
- Some caveats of autonomous transactions in database triggers
- What is the scope of uniqueness constraint?
- Strange OIT/OAT/OST/Next Transaction numbers
- Wait vs. no-wait transactions
- Lesson about lock resolution, deadlocks and history
- Query to get information about the current transaction
- Some facts about read_committed + isc_tpb_no_rec_version
- What is the fastest transaction isolation level ?
- Lesson about how to avoid deadlocks and lock conflicts
- Oldest Snapshot
- Oldest Active Transaction and MON$
- Firebird or InterBase and the Oldest Interesting Transaction
- Atomicity of UPDATEs
- Lesson about concurrent updates
- How to Lock a Record in InterBase/Firebird
- Interesting lesson about DDL and commit
- Transaction Counters in monitoring tables vs. header page
- Two phase recovery
- Oldest Transaction greater than Oldest Active?
- An easy way to see how many database pages are being used to track old transactions
- How ON DELETE CASCADE works, and why
- Record versions: consistent read, concurrency control, and undo log
- Oldest Snapshot and Performance Issues
- Why is CommitRetaining bad?
- More about SAVEPOINTs
- L’isolement des transactions dans Firebird
Triggers
- Some caveats of autonomous transactions in database triggers
- How to check in trigger code whether action was caused by cascade or user
- Do you want to Inactivate / Activate a trigger from stored procedure?
- Version Control of Stored Procedures/Triggers
- Global trigger
- Introduction to InterBase Stored Procedures and Triggers
UDF
- How to write an internal UDF function
- New internal functions in Firebird 2.1 may collide with your external UDF's!
- UDF returning database file path
UDF Library
- fb_mhash / fb_shash
- FB Smtp UDF
- FB Server Lock UDF
- rFunc UDF Library
- FreeAdhocUDF
- Blob UDFs
- External File UDF's
- uuidUDF
UDR
Upgrade
Utilities
- FBOpt The Database Migration and Optimization Tool
- FBUpkeep Firebird server & database maintenance utility
Warehouse
What's New
Windows
- Firebird and Windows 10 Fall Creators Update
- How to discover which architecture is installed on Windows
- Problems running gfix and gbak from windows service
- How to install system wide fbembed.dll on Windows?
- Microsoft Windows - Forced Writes ON or OFF?
- Firebird vs Windows: file-system caching issue
- Problem with the Windows System Cache
- Lesson about the FileSystemCache on 64bit Windows
- Minimum Firebird Client Installation on Windows
- Windows system clock and Firebird server
- Running two or more versions of Firebird simultaneously under Windows
- Building Firebird on Windows and Linux
- A Quick Guide to the Windows Startup Parameters for Firebird/InterBase