firebird_fdw

This Release
firebird_fdw 0.1.0
Date
Status
Unstable
Latest Unstable
firebird_fdw 0.2.5 —
Other Releases
Abstract
A PostgreSQL foreign data wrapper (FDW) for Firebird
Released By
ibarwick
License
PostgreSQL
Resources
Special Files
Tags

Extensions

firebird_fdw 0.2.5
A PostgreSQL foreign data wrapper (FDW) for Firebird

README

Contents

Firebird Foreign Data Wrapper for PostgreSQL
============================================

This is an experimental foreign data wrapper (FDW) to connect PostgreSQL
to Firebird. It provides basic functionality, including both read (SELECT)
and write (INSERT/UPDATE/DELETE) support. However it is still very much
work-in-progress; use at your own risk.

firebird_fdw will work with PostgreSQL 9.3 or later (it was developed
against the current development version) and in its current form will not
work with pre-9.3 versions (although it should be simple enough to add
read-only support).

It was written for Firebird 2.5 and may work with earlier versions.


Supported platforms
-------------------

firebird_fdw was developed on Linux and OS X, and should run on any
reasonably POSIX-compliant system.


Installation
------------

Prerequisites:
- Firebird client library (libfbclient) and API header file (ibase.h)
- libfq, a slightly saner API wrapper for the Firebird C API; see:
  https://github.com/ibarwick/libfq

The Firebird include/library files often end up in non-standard locations;
PG_CPPFLAGS and SHLIB_LINK can be used to provide the appropriate flags.
For OS X they would look something like this:

    export PG_CPPFLAGS="-I /Library/Frameworks/Firebird.framework/Versions/A/Headers/"
    export SHLIB_LINK="-L/Library/Frameworks/Firebird.framework/Versions/A/Libraries/"

firebird_fdw is installed as a PostgreSQL extension; it requires the
pg_config binary for the target installation to be in the shell path.

The usual 'make && make install' should take care of the actual compilation.


Usage
-----

**NOTE: these options are provisional and may change**

firebird_fdw accepts the following options:

    'address':
        The Firebird server's address (default: localhost)

    'database':
        The database to connect to

    'username':
        The username to connect as (not case-sensitive)

    'password':
        The user's password (note that Firebird only recognizes
        the first 8 digits of a password)

    'table':
        The Firebird table name (not case-sensitive).
        Cannot be used together with the 'query' option.

    'query':
        A Firebird SQL statement producing a result set which can be
        treated like a table. Cannot be used together with the 'table'
        option.

Note that while a Firebird foreign table can be defined without any
columns, an error will be raised as soon as any operations are carried
out on it.


Example
-------

Install the extension:

    CREATE EXTENSION firebird_fdw;
    CREATE FOREIGN DATA WRAPPER firebird
      HANDLER firebird_fdw_handler
      VALIDATOR firebird_fdw_validator;

Create a foreign server with appropriate configuration:

    CREATE SERVER firebird_server
      FOREIGN DATA WRAPPER firebird
      OPTIONS (
        address 'localhost',
        database '/path/to/database'
     );

Create an appropriate user mapping:

    CREATE USER MAPPING FOR CURRENT_USER SERVER firebird_server
      OPTIONS(username 'sysdba', password 'masterke');

Create a foreign table referencing the Firebird table 'fdw_test':

    CREATE FOREIGN TABLE fb_test(
      id SMALLINT,
      val VARCHAR(2048)
    )
    SERVER firebird_server
    OPTIONS(
      table 'fdw_test'
    );

Create a foreign table as a Firebird query:

    CREATE FOREIGN TABLE fb_test(
      id SMALLINT,
      val VARCHAR(2048)
    )
    SERVER firebird_server
    OPTIONS(
      query 'SELECT id, val FROM fdw_test'
    );


Limitations
-----------

Many; among the more egregious:
- No Firebird transaction support
- No explicit character set/encoding support
- No support for some Firebird datatypes (BLOB, ARRAY)
- TIMESTAMP/TIME: currently sub-second units will be truncated
- No column aliases possible (column names defined in CREATE FOREIGN TABLE
  must exactly match the Firebird column names)
- No pushdowns
- No connection caching


Useful links
------------

* Source
 - https://github.com/ibarwick/firebird_fdw

* Documentation
 - http://www.postgresql.org/docs/current/interactive/ddl-foreign-data.html
 - http://www.postgresql.org/docs/current/interactive/sql-createforeigndatawrapper.html
 - http://www.postgresql.org/docs/current/interactive/sql-createforeigntable.html
 - http://www.postgresql.org/docs/current/interactive/fdwhandler.html
 - http://www.postgresql.org/docs/current/interactive/postgres-fdw.html

* Other FDWs
 - https://wiki.postgresql.org/wiki/Fdw
 - http://pgxn.org/tag/fdw/