martes, 6 de julio de 2010

Cómo interconectar PostgreSQL con Oracle

Este artículo explica cómo obtener datos almacenados en una BD Oracle desde PostgreSQL (a través de una vista). Esto permite obtener datos en línea y sin la necesidad de replicar la información en diferentes BDs.

La idea es crear una vista, que invocará un procedimiento almacenado, que se conectará a la BD Oracle y extraerá los datos.

El procedimiento almacenado fue programado en Java y registrado en PostgreSQL utilizando la librería Pl/Java.

Notas:

Este ejemplo fue montado sobre una máquina con Linux Debian Lenny. Para la versión actual de Pl/Java se tuvo que descargar el jdk 1.4 más reciente (aún y cuando ya fue declarado como obsoleto) debido a que la librería fue desarrollada con esta versión.

Es importante destacar que el procedimiento almacenado desarrollado fue compilado con la versión 1.4 del jdk.

Primero: Instalación de Pl/Java

Lo primero que debemos hacer es generar los archivos pljava.so y pljava.jar para que utilicen la versión de Sun del jdk y no la libre GCJ (esto en caso de que no se desee utilizar esta versión).

En el siguiente vínculo puede conseguir una guía que explica bastante bien cómo generar estos archivos (pljava.so y pljava.jar). Luego, puede descargarlos directamente de aquí. Recuerde que estos archivos fueron generados con la versión 1.4 del jdk de Sun.

En caso de que decida generar estos archivos usted mismo, es importante destacar que necesitará instalar los paquetes: libpq-dev y postgresql-server-dev-8.3.

Una vez descargados (o generados) los archivos, deberá copiarlos a la ruta donde PostgreSQL busca las librerías, por ejemplo: /usr/lib/postgresql/8.3/lib/

Ahora deberá definir las siguientes variables de entorno dentro del archivo environment de PostgreSQL (Ej. /etc/postgresql/8.3/main/environment):


JAVA_HOME = '/opt/j2sdk1.4.2_19'
LD_LIBRARY_PATH = '/opt/j2sdk1.4.2_19/jre/lib/i386:/opt/j2sdk1.4.2_19/jre/lib/i386/client'


Ambas variables de entorno permitirán a PostgreSQL localizar el jdk de Java y los archivos de librerías del sistema de Java (.so o .dll según el SO).

Una vez configurada la librería pljava y definidas las variables de entorno, se deberá correr el script install.sql incluido con la librería, para definitivamente culminar la instalación. El script podrá correrlo sobre la BD template1, para que todas las BD puedan utilizar la librería; sobre un template que usted defina, para habilitar determinadas BD; o directamente sobre la BD de su proyecto, para habilitarla sólo a ella.

Segundo: Programación del Procedimiento

En el siguiente vínculo puede descargar los fuentes de la aplicación. Podrá observar que los fuentes son acompañados de un jar que los contiene, esto debido a que los mismos deben ser empaquetados en un JAR para registrarlos posteriormente en PostgreSQL.

Importante: Deberá colocar el driver JDBC de Oracle acorde a la versión del jdk, en este caso 1.4 (ojdbc14.jar), dentro de la carpeta $JAVA_HOME/jre/lib/ext.

Tercero: Registrando el procedimiento almacenado

Luego deberá conectarse a la BD, registrar el JAR que contiene los procedimientos almacenados, definir un nuevo schema, definir un nuevo classpath, definir el procedimiento almacenado y definir la vista correspondiente. Por ejemplo:


SELECT sqlj.install_jar('file:///home/rodolfo/sigcne/sigcne.jar', 'sigcne', false);
CREATE SCHEMA oracle;
SELECT sqlj.set_classpath('oracle', 'sigcne');
CREATE FUNCTION oracle.getData() RETURNS SETOF varchar AS 'oracle.OrclConnection.getData' IMMUTABLE LANGUAGE java;
CREATE VIEW centros_votacion AS SELECT oracle.getData();


Cuarto: Invocando la vista

Sencillamente puede llamar la vista de la siguiente forma:


SELECT * FROM centros_votacion;

No hay comentarios:

Publicar un comentario