ODBC para Servidor de Bases de Datos PostGreSQL ( II )

Autor: Juan Antonio Martinez Castaño
E-mail: jantonio@drake.dit.upm.es


Indice:

  1. Presentación
  2. Introducción
  3. Un primer paseo por el API ODBC
  4. El API ODBC en Linux
  5. Un Ejemplo práctico: PHP-3.0.1
  6. Conclusiones
  7. Referencias

Presentación

Continuando con la serie sobre ODBC para Linux, describimos en este artículo la instalación de los diversos drivers del API ODBC en nuestro sistema operativo favorito, Presentando como ejemplo de aplicación el complemento ideal de todo gestor de bases de datos: PHP-3.0.1


Introducción

Antes de emprender la instalación de ODBC es preciso aclarar algunos conceptos de funcionamiento del API de ODBC.

Como explicamos en el número anterior de Linux Actual, ODBC es un API de interfaz entre clientes de bases de datos y servidores de bases de datos. La figura 1 ilustra este esquema:

Estructura del API ODBC
figura 1: Estructura en capas del API ODBC

La primera capa constituye la librería del API que utilizan las diversas aplicaciones que "hablan" ODBC. Microsoft proporciona para sus sistemas el fichero ODBC32.DLL, que contienen el API y el interfaz con el sistema operativo, permitiendo a los desarrolladores de controladores ODBC incluír dicha librería en sus distribuciones ( de la misma manera que para la DLL de controles Visual Basic VBRUN.DLL ). Para sistemas UNIX, el proyecto FreeODBC, ha desarrollado su propia librería GPL libodbc.so.x.x que es totalmente compatible con las especificaciones descritas por Microsoft

El administrador de orígenes de datos es el responsable del "rutado" de peticiones de ODBC desde la librería hasta los controladores. Para ello se discriminan tres tipos de orígenes de datos: de usuario, de archivo y de sistema. Esta nomenclatura es motivo frecuente de confusión: cuando desde Windows se abre desde el panel de control el menú de "controladores ODBC" se encuentra con esta clasificación, y cuando abre cada una de las ventanas se encuentra con los mismos contenidos... Vamos a explicarlo un poco:

Por último, cada origen de datos tiene asociado un controlador, que actúa de "pasarela" entre el API y el acceso físico a los datos


Un primer paseo por el API de ODBC

En el CD-Rom que acompaña a este número de la revista se incluyen bajo el directorio iODBC-1.0 los ficheros correspondientes a la libreria ODBC para Linux, y los drivers ODBC para PostGreSQL y MySQL bajo Linux. Descomprimamos el paquete, y echemos un vistazo a los ficheros odbc_types.h y odbc_funcs.h. Estos ficheros constiuyen el el interfaz del API ODBC tal como ha sido definido por Microsoft y definen la lista de funciones y definiciones que todo driver ODBC debe cumplir ( bien totalmente o en parte, en función del nivel de conformidad del driver )

Del mismo modo, descomprimiendo los ficheros de la librería iODBC, se obtienen los ficheros isql.h e isqlext.h que contienen las definiciones de tipos de datos y los codigos de las diversas llamadas a la librería del API ODBC.

Podemos observar que el API ODBC no es sino una llamada a una función de entrada, en la que, dependiendo de los parámetros especificados se realizan unas u otras funciones. Se observa una correspondencia casi lineal entre los códigos de entrada del API ODBC y las funciones definidas para el driver PostGreSQL. Esta correspondencia, que en Linux/UNIX es lineal, en sistemas MS-Windows "atraviesa" el sistema operativo (?) donde el administrador de orígenes de datos redirecciona las peticiones a los diferentes drivers instalados.
En cambio, en Linux/UNIX, la misión del administrador de orígenes de datos es realizada por la propia librería. Existe para ello un fichero iodbc.ini donde se le especifican los drivers y los modos de acceso. ¿ Cómo se realiza la conexión entre el API y el driver?. Mediante un sistema de "dynamic loading" de los diversos drivers de cada gestor de base de datos, en función de las especificaciones del fichero iodbc.ini

El API de ODBC en Linux

Llegados a este punto preguntamos: ¿Cómo funciona de cara al programador la librería ODBC?. La respuesta es ridículamente sencilla: el API ODBC consiste en un interfaz que implementa un método de pasar peticiones en lenguaje SQL a través de una serie de funciones. Con ODBC podemos:

En la práctica, ni todas las aplicaciones, ni todos los controladores de orígenes de datos son capaces de gestionar todas las funcionalidades previstas por el API. Por ello se establecen los denominados "niveles de conformidad SQL" en la aplicación así como "niveles de conformidad del controlador", que permiten al administrador de orígenes de datos saber qué puede hacer tanto con el driver como con la aplicación.

Remitimos al lector a la literatura indicada en las referencias para buscar las especificaciones y descripciones de cada nivel de compatibilidad

El proyecto FreeODBC ha desarrollado una librería, denominada iODBC, que cumple con las especificaciones del API ODBC 2.0 de Microsoft, y que integra las funciones de API y de administrador de orígenes de datos.

¿Cómo se aplica ésto en sistemas UNIX? El proyecto FreeODBC ha desarrollado una librería, denominada iODBC, que cumple con las especificaciones del API ODBC 2.0 de Microsoft, y que integra las funciones de API y de administrador de orígenes de datos. Cada servidor de bases de datos provee un driver que hace las funciones de controlador de orígenes de datos y de origen de datos de sistema específico de cada servidor de bases de datos.
Existe un fichero ${HOME}/.iodbc.ini, que indica a la librería libodbc.so.x.x, los controladores de que dispone cada sistema, y cómo se accede a ellos. Todo el interfaz esta implementado mediante librerías dinámicas. El resultado de todo esto, es que el programador se encuentra con un API virtualmente idéntico al que se encontraría si estuviera trabajando en una maquina M$-Windows

En el CD-Rom que se acompaña a esta revista, bajo el directorio odbc/ encontramos el fichero iODBC-1.0.tgz, que contiene:

Su instalación es realmente sencilla, pues basta seguir las instrucciones para tener las librerías libpgodbc.so, libmyodbc.so y libiodbc.so compiladas. Unicamente se deberá tener presente el instalar los ficheros include y las librerías de manera que sean accesibles por el resto de las aplicaciones, ( por ejemplo en /usr/local/lib y /usr/local/include ), y modificar el fichero /etc/ld.so.conf para que el comando ldconfig localice dichas librerías y las incluya en el caché

Navegando por el Web, podremos encontrar drivers de iODBC para casi todas las bases de datos disponibles en Linux.

Buceando por las paginas web, podremos encontrar drivers de iODBC para casi todas las bases de datos disponibles en Linux. De hecho, Los desarrolladores de iODBC han decidido incluír en sus nuevas releases todos los drivers de aquellas bases de datos que libremente los provean, incluyendo además de serie la pasarela JDBC-ODBC.


Un Ejemplo práctico: PHP-3.0.1

Para que nuestro servidor de bases de datos esté completo nos falta un componente imprescindible en todo servidor de información: el poder hacer consultas a la base de datos desde el Web. Para ello Linux dispone de la herramienta ideal: PHP

PHP es un lenguaje de scripting con sintaxis tipo C, orientado a la generación de páginas Web. Al igual que Perl, puede ser invocado como un CGI script desde el servidor, o bien, insertado en documentos HTML mediante cláusulas <?php..... ?>. Estas tags son detectadas por el servidor web, que las "intercepta" y transfiere al programa PHP que las interpreta, dando por su salida estandard el código HTML que el programador desea

Asímismo, PHP es capaz de tomar y procesar los parámetros procedentes de un FORM, convirtiéndolos directamente a variables del lenguaje, que pueden ser utilizadas a voluntad.

La característica de PHP que nos interesa, es que tiene soporte directo de funciones de acceso a las diversas bases de datos existentes para Linux, incluyendo -cómo no- a PostGreSQL, y a ODBC.

PHP es un lenguaje de scripting con sintaxis tipo C, orientado a la generación de páginas Web.

A la hora de instalarlo en nuestro sistema deberemos decidir:

En el Listado 1 se indican las funciones ODBC que soporta PHP, así como sus parámetros. Del mismo modo, en el CD-Rom bajo el directorio listados se incluyen una serie de ejemplos de paginas web con extensiones php ( ficheros .pthml ) que ilustran el manejo de php con accesos a la base de datos que se creó de ejemplo en el artículo anterior

Unified ODBC Functions
  • (int) odbc_autocommit($connection_id, $OnOff)
  • (void) odbc_close($connection_id)
  • (void) odbc_close_all(void)
  • (int) odbc_commit($connection_id)
  • (int) odbc_connect($dsn, $user, $password)
  • (int) odbc_pconnect($dsn, $user, $password)
  • (string) odbc_cursor($result_id)
  • (int) odbc_do($connection_id, $query_string)
  • (int) odbc_exec($connection_id, $query_string)
  • (int) odbc_prepare($connection_id, $query_string)
  • (int) odbc_execute($result_id, $array)
  • (int) odbc_fetch_row($result_id, $row_number)
  • (int) odbc_fetch_into($result_id, $row_number, $array_ptr)
  • (int) odbc_field_len($result_id, $field_number)
  • (string) odbc_field_name($result_id, $field_number)
  • (string) odbc_field_type($result_id, $field)
  • (int) odbc_free_result($result_id)
  • (int) odbc_num_fields($result_id)
  • (int) odbc_num_rows($result_id)
  • (string) odbc_result($result_id, $field)
  • (int) odbc_result_all($result_id, $format)
  • (int) odbc_rollback($connection_id)

Listado 1: Funciones ODBC soportadas por PHP

Remitimos al lector al manual para proceder a la instalación. Es algo complicado, y normalmente implica una recompilación del servidor Apache, pero los resultados compensan con creces el esfuerzo dedicado.

Prestemos atención a como PHP implementa las diversas funciones de llamada al API ODBC o al driver ODBC que tengamos instalado. Para ello echemos un vistazo al fichero functions/unified_odbc.c . En el se enumeran todas y cada una de las funciones del API ODBC, y se efectúa una translación entre las funciones PHP y las funciones equivalentes del API. En función de los parámetros de configuración indicados en el momento de la compilación, PHP utilizará bien el API iODBC, o bien accederá directamente al driver ODBC del servidor de bases de datos que tengamos instalado. Esta última configuración tiene un inconveniente: impide que podamos tener varios servidores que hablen ODBC accesibles desde el servidor Web. En un primer momento, esto puede parecer que no tiene sentido, pero piénsese que iODBC permite el uso de varios servidores de bases de datos simultaneamente, por lo que podríamos utilizar la librería como un "túnel" de acceso a un servidor de databases remoto que careciera de servidor web...


Conclusión

En este segundo artículo dedicado a la conectividad ODBC, se han introducido los conceptos básicos de dicho sistema. Asimismo hemos aprendido a instalar y configurar los drivers ODBC para PostGreSQL y las librerías ODBC para Linux/UNIX, poniendo como ejemplo de aplicación el interfaz web de acceso a base de datos PHP

En el próximo número de Linux Actual, finalizaremos la serie sobre ODBC, explicando la forma en que debemos instalar los drivers ODBC para PostGreSQL en sistemas Microsoft Windows-3.XX y Windows-95, con ejemplos de utilización desde MS-Access-97.


Referencias