El módulo de PostgreSQL informix_fdw, o Informix Foreign Datawrapper (FDW), es un controlador que permite acceder a tablas de un servidor de bases de datos Informix desde una base PostgreSQL. Las tablas foráneas se acceden de forma transparente como tablas normales de PostgreSQL, pueden usarse para hacer join de datos contra tablas de PostgreSQL reales, importar datos, y más. La interfaz FDW implementada en PostgreSQL desde la versión 9.1 soporta el estándar SQL/MED. A partir de la versión 9.3, PostgreSQL soporta acciones de modificación de datos en tablas de Informix.

Este tipo de módulos son de vital importancia cuando se requiere cruzar datos provenientes de tablas en diferentes motores de bases de datos. Esto es algo muy común en grandes organizaciones, donde por ejemplo datos de usuarios y finanzas se encuentran en diferentes sistemas y necesitan ser cruzados para ciertas operaciones.

En este caso se necesita acceder a datos de tablas de un servidor de bases de datos Informix en un sistema que trabaja con una base de datos PostgreSQL.

Cabe destacar que informix_fdw requiere una instalación completa del SDK de Informix en el servidor donde corre PostgreSQL para su correcto funcionamiento.

La última versión de disponible de Informix FDW al momento de escribir este artículo es la 5.3. En este ejemplo se instala la versión 3.1 pero el procedimiento es exactamente el mismo.

Descargar los fuentes de informix_fdw:

# wget https://github.com/credativ/informix_fdw/archive/REL0_3_1.tar.gz
# mv REL0_3_1.tar.gz informix_fdw-REL0_3_1.tar.gz

Luego es necesario contar con el instalador de Informix (del cual no proveo un link, ya que es software propietario y se requiere de una licencia para su descarga).

Instalación de Informix SDK

En este ejemplo se debe instalar la versión 11.70 (la misma que corre en el servidor de bases de datos al cual nos conectaremos).

Extraer el instalador de Informix:

# chown root:root INFX_GED_11.70.FC9_LINUX_X86_64_M.tar
# mkdir INFX_GED_11.70.FC9_LINUX_X86_64_M
# cd INFX_GED_11.70.FC9_LINUX_X86_64_M/
# tar axf ../INFX_GED_11.70.FC9_LINUX_X86_64_M.tar

La ayuda del instalador de Informix se puede revisar con el navegador w3m:

# w3m -dump -T text/html README.html

Cambiar el directorio temporal mediante la variable de entorno IATEMPDIR:

# IATEMPDIR=/usr/local/tmp/
# export IATEMPDIR

Ejecutar el instalador de Informix:

# mkdir -p /usr/local/tmp
# ./ids_install

El instalador del SDK de Informix es interactivo e involucra los siguientes pasos:

  1. Presionar ENTER y aceptar la licencia (presionar 1)
  2. Luego dejar la opción por defecto ("1- Install products and features") y presionar ENTER.
  3. Cambiar el directorio de instalación a /usr/local/informix.
  4. Seleccionar 2 para instalación "Custom". Luego presionar ENTER para continuar.
  5. Seleccionar el SDK completo y el GLS completo (ítems 24 y 40). Debe quedar así:
  6. ===============================================================================
    Choose Product Features
    -----------------------
    
    ENTER A COMMA_SEPARATED LIST OF NUMBERS REPRESENTING THE FEATURES YOU WOULD 
    LIKE TO SELECT, OR DESELECT. TO VIEW A FEATURE'S DESCRIPTION, ENTER 
    '?<NUMBER>'.  PRESS <RETURN> WHEN YOU ARE DONE:
    
    1- [ ] IBM Informix database server
    2-  |-[ ] Base Server
    3-  |-[ ] Extensions and tools
    4-     |-[ ] J/Foundation
    5-     |-[ ] Database extensions
    6-     |-[ ] Conversion and reversion support
    7-     |-[ ] XML publishing
    8-  |-[ ] Demonstration database scripts
    9-  |-[ ] Enterprise Replication
    10-  |-[ ] Data loading utilities
    11-     |-[ ] onunload and onload utilities
    12-     |-[ ] dbload utility
    13-     |-[ ] High-Performance Loader
    14-  |-[ ] Backup and Restore
    15-     |-[ ] archecker utility
    16-     |-[ ] ON-Bar utility
    17-     |-[ ] Informix Storage Manager
    18-     |-[ ] Informix interface to Tivoli Storage Manager
    19-  |-[ ] Administrative utilities
    20-     |-[ ] Performance monitoring utilities
    21-     |-[ ] Miscellaneous monitoring utilities
    22-     |-[ ] Auditing utilities
    23-     |-[ ] Database import and export utilities
    24- [X] IBM Informix Client SDK
    25-  |-[X] IBM Informix Object Interface for C++
    26-     |-[X] IBM Informix Object Interface for C++ demos
    27-  |-[X] IBM Informix ESQL/C
    28-     |-[X] IBM Informix ESQL/C demos
    29-     |-[X] 7.2 application compatibility module
    30-  |-[X] IBM Informix LIBDMI for client applications
    31-  |-[X] IBM Informix ODBC Driver
    32-     |-[X] IBM Informix ODBC Driver demos
    33- [ ] IBM Informix Connect
    34-  |-[ ] IBM Informix Object Interface for C++
    35-  |-[ ] IBM Informix ESQL/C
    36-     |-[ ] 7.2 application compatibility module
    37-  |-[ ] IBM Informix LIBDMI for client applications
    38-  |-[ ] IBM Informix ODBC Driver
    39- [ ] IBM Informix JDBC
    40- [X] Global Language Support (GLS)
    41-  |-[X] West European and Americas
    42-  |-[X] East European and Slavic
    43-  |-[X] Chinese
    44-  |-[X] Japanese
    45-  |-[X] Korean
    46-  |-[X] Thai
    47- [ ] IBM Informix OpenAdmin Tool
    48-  |-[ ] IBM Informix Replication Plug-in for OpenAdmin Tool
    49-  |-[ ] IBM Informix Schema Manager Plug-in for OpenAdmin Tool
    50-  |-[ ] IBM Informix TimeSeries Plug-in for OpenAdmin Tool
    51-  |-[ ] IBM Informix Health Advisor Plug-in for OpenAdmin Tool
    
    Please choose the Features to be installed by this installer.: 
    
    
    
  7. Luego presionar 1 para finalizar la instalación:
  8. ===============================================================================
    Feature review
    --------------
    
    Would you like to review the features that you have selected, or change which 
    features you have selected?
    
    ->1- Continue
    2- Return to feature tree
    
    ENTER THE NUMBER OF THE DESIRED CHOICE, OR PRESS <ENTER> TO ACCEPT THE 
    DEFAULT: 1
    
    
    
    ===============================================================================
    

Al finalizar la instalación del SDK de Informix, borrar los archivos temporales generados durante la misma:

# rm -fr /usr/local/tmp/*

Instalación de Informix Foreign Datawrapper

Ahora se procede con la instalación de informix_fdw.

Extraer el paquete informix_fdw-REL0_3_1:

# cd ..
# tar xzvf informix_fdw-REL0_3_1.tar.gz 
# cd informix_fdw-REL0_3_1/

Si en lugar de una release estable se desea clonar la rama master del repositorio (más actualizada), ejecutar:

# git clone https://github.com/credativ/informix_fdw.git
# cd informix_fdw

La ayuda se encuentra en el archivo README.md:

# less README

Editar el perfil y actualizar la configuración de las variables de entorno PATH y LD_LIBRARY_PATH para cargar correctamente las librerías de Informix:

# nano /etc/profile
PATH="${PATH}:/usr/local/informix/bin"
PATH="${PATH}:/usr/local/informix/lib"
PATH="${PATH}:/usr/local/informix/lib/esql"
export PATH

LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/informix/lib:/usr/local/informix/lib/esql"
export LD_LIBRARY_PATH
# source /etc/profile

Finalmente, instalar la extensión informix_fdw ejecutando:

# INFORMIXDIR=/usr/local/informix/ USE_PGXS=1 make install

Reiniciar el servidor Postgres:

# service postgres restart

Instalación de GSK

Si el servidor Informix utiliza SSL/TLS, será necesario instalar el Global Security Kit (GSK).

Los paquetes a instalar son gskssl64 y gskcrypt64. Ambos están disponibles en el directorio /usr/local/informix/gskit/ dentro de la instalación del SDK de Informix:

# cd /usr/local/informix/gskit/

Instalar el paquete .deb gskssl64:

# dpkg -i gskssl64_8.0-50.75.linux.x86_64.deb

Luego instalar gskcrypt64. El problema con este paquete es que sólo está disponible para Red Hat, con lo cual es necesario convertir el paquete de RPM a DEB:

# apt-get install alien
# tar -xvf gskcrypt64-8.0.50.75.linux.x86_64.tar
root@pgdb:/usr/local/informix/gskit# alien -d gskcrypt64-8.0.50.75.linux.x86_64.rpm 
Warning: Skipping conversion of scripts in package gskcrypt64: postinst prerm
Warning: Use the --scripts parameter to include the scripts.
gskcrypt64_8.0-51.75_amd64.deb generated

Luego instalar el DEB generado:

# dpkg -i gskcrypt64_8.0-51.75_amd64.deb

Usuarios y permisos

Antes de comenzar a utilizar informix_fdw se deberá crear un usuario para Informix:

# cd /usr/local/
# useradd -m -s /bin/bash informix
# chown -R informix:informix informix/

Luego Postgres debe ser capaz de acceder a los directorios donde se encuentran las librerías de Informix necesarias para el funcionamiento de FDW:

# chmod o+rx /usr/local/informix/
# chmod o+rx /usr/local/informix/lib/
# chmod o+rx /usr/local/informix/lib/esql/
# chmod o+rx /usr/local/informix/lib/*.so
# chmod o+rx /usr/local/informix/lib/esql/*.so
# chmod o+r /usr/local/informix/lib/*.a
# chmod o+r /usr/local/informix/lib/esql/*.a

Ya es posible cargar la extensión desde el motor PostgreSQL y definir tablas foráneas de Informix. Consultar la ayuda oficial al respecto:

informix_fdw/README

Referencias

Compartí este artículo