Artículo para la revista Linux Actual número 13: Interfaces WWW a bases de datos. Javier Fernández-Sanguino Peña 18 Marzo 2000 Con este artículo vamos a dar comienzo a una serie que va a estudiar las herramientas, diseño y programación para unir dos importantes tec­ nologías entre sí: Internet y las bases de datos. 11.. IInnttrroodduucccciióónn aa llaa sseerriiee Este artículo es el primero de una serie que pretende enseñar al lector como, con herramientas sobre GNU/Linux se pueden unir dos tecnologías tan importante entre sí hoy en día como son las bases de datos y el fenómeno de Internet, en particular la _W_o_r_l_d _W_i_d_e _W_e_b. En el primer artículo de esta serie se va a realizar una introducción breve a estas tecnologías y a explicar la razón de usar como herramienta de desarrollo e integración a GNU/Linux, posteriormente vamos a analizar las herramientas que pueden servirnos para gestionar la base de datos, y se aplicarán todos los conceptos en el diseño de una aplicación real. Se verán los métodos de programación, y las alternativas existentes actualmente para integrar ambos sistemas, deteniéndonos en una de ellas para solucionar la implementación de la aplicación. 22.. IInnttrroodduucccciióónn bbrreevvee aa llaass bbaasseess ddee ddaattooss La tecnología de bases de datos es una de las más antiguas dentro de la ciencia de la informática, esencialmente es una tecnología que se basa en la capacidad para almacenar y recuperar información relacionada entre sí. Una base de datos puede ser desde un fichero de texto (estilo _/_e_t_c_/_p_a_s_s_w_d) hasta un conjunto de tablas repartidas en ficheros binarios y que acumulen millones de registros. En cualquier caso es necesario un programa capaz de gestionar estos datos y permitir acceder a esta información de la manera más rápida posible. Existe más de un esquema a la hora del desarrollo y definición de las bases de datos: bases de datos orientadas a objetos, bases de datos relacionales, bases de datos jerárquicas, etc... Hoy en día, a pesar del crecimiento de la programación orientada a objetos y, por tanto, de las bases de datos diseñadas con la misma filosofía (que actualmente permiten el desarrollo de las bases de datos multimedia), el tipo de bases de datos más utilizada sigue siendo las bases de datos relacionales. Es necesario distinguir en una base de datos su diseño de su implementación, como veremos más adelante, para el mismo diseño se pueden escoger implementaciones distintas que se ajusten más o menos a éste. Evidentemante, si se escoge una implementación inadecuada se perderán algunas de las ventajas del modelo realizado en la etapa de diseño. Las bases de datos constituyen una importante herramienta a la hora de almacenar y recuperar la información. Sin embargo para utilizar esta herramienta es necesario ofrecer un interfaz al usuario para abstraer toda la complejidad de ésta. Sin éste interfaz la base de datos puede seguir utilizándose pero el usuario ha de conocer el "lenguaje" de la base de datos para acceder a ella (actualmente el más utilizado es SQL, _S_t_a_n_d_a_r_d _Q_u_e_r_y _L_a_n_g_u_a_g_e). 33.. EEll iinntteerrffaazz WWWWWW aa uunnaa bbaassee ddee ddaattooss.. Así pues, el interfaz es un elemento fundamental a la hora de hacer uso de una base de datos, aqí es donde entra la World Wide Web. La World Wide Web se puede considerar como el elemento de Internet que integra el cliente universal, y por tanto, puede usarse como el interfaz universal a todo tipo de aplicaiones. Muchos fabricantes de equipos y desarrolladores han empezado a mover sus aplicaciones e interfaces para que puedan ser operados desde con clientes basados en ésta. Así, por ejemplo, nos encontramos con fabricantes de elementos de interconexión de redes (_s_w_i_t_c_h_e_s, conmutadores, o _r_o_u_t_e_r_s) o impresoras de red que incluyen en su hardware un servidor de WWW para que sus herramientas puedan ser manejadas, configuradas, en fín, gestionadas, desde un navegador de WWW. La ventaja para el fabricante es clara ya que le evita tener que crear una herramienta para el cliente, ahorrando en el desarrollo; no olvidemos que para un fabricante de hardware un cliente puede ser, potencialmente, cualquie combinación posible de uso de hardware, sistema operativo y software. Así pues en lugar de tener que realizar un interfaz para, por ejemplo, Solaris, otro para Linux y otro para Windows NT, el fabricante indica al usuario que sólo necesita un navegador de WWW como interfaz a la gestión de su equipo. No será necesario que programa un interfaz para cada plataforma en la que quiera ser gestionado sino que, al incorporar tecnologías estándar en la WWW tanto de presentación (HTML) como de interacción cliente servidor (protocolo HTTP) su herramienta puede ser utilizada desde cualquier lugar y con cualquier plataforma que tenga un cliente de WWW. El movimiento del acceso de bases de datos de sistemas propietarios a un sistema abierto como es la WWW, empezó ya hace años, y su arquetipo un sistema por y para la WWW, es el conocido _y_a_h_o_o, en realidad cualquier buscador en la WWW. Este buscador no es más que una base de datos de documentos al que se accede mediante un interfaz WWW. La ventaja, al margen de la que ofrezca la aplicación en sí, es que por un lado cualquiera puede "preguntar" a la base de datos sin conocer el funcionamiento de la base de datos detrás, por otro los "clientes" potenciales son todos aquellos con acceso a la WWW porque los estándares usados son los mismos que para acceder a cualquier otro servidor. 44.. GGNNUU//LLiinnuuxx ccoommoo ssiisstteemmaa ddee ddeessaarrrroolllloo GNU/Linux es un sistema ideal para instalar una base de datos que se va a operar desde Internet, no sólo por su demostrada velocidad en el acceso a una base de datos, sino por la multitud de bases de datos y herramientas para gestionarlas existentes. En GNU/Linux se disponen actualmente de un buen número de sistemas de bases de datos, por un lado sistemas libres como PostgreSQL o BeagleSQL, por otro sistemas "semi-libres" como mSQL o mySQL, y, finalmente, sistemas propietarios: Oracle, Informix o Sybase. También dispone de una multitud de servidores de WWW, con una especial mención a Apache, el servidor de WWW más utilizado en Internet. Finalmente, al tratarse de un sistema abierto y poderse optimizar "a medida" para el desarrollo a realizar lo convierte en la alternativa ideal. No hay que olvidar tampoco el factor coste. En la actualidad se puede montar un sistema profesional utilizando herramientas totalmente libres, el coste sera sólo el del hardware y el de las personas dedicadas a montarlo. El coste en licencias será nulo y puede creer el lector que el coste de un sistema de base de datos propietario y un sistema operativo propietario que de las mismas prestaciones (sino menos) es ciertamente elevado (estamos hablando de millones de pesetas). Si se monta el sistema con herramientas libres se podrán adaptar al 100% para lo que se precisa ya que el desarrollador tendrá a su disposición el código fuente de todas ellas para adaptarlas a medida. 55.. EElleecccciióónn ddee llooss ccoommppoonneenntteess Para montar un sistema de interfaz de bases de datos via WWW se han elegido como componentes básicos: · sistema operativo: Debian GNU/Linux 2.1. Actualmente Debian es la distribución que más herramientas ofrece para un desarrollador y para el usuario, con más de 5000 paquetes (4 cds de binarios en Debian 2.2) de código libre en la distribución principal. Si el lector es un desarrollador _d_e_b_e usar Debian GNU/Linux. Como núcleo del sistema utilizaremos un nucleo Linux 2.2 ajustado a las necesidades. · servidor de web: Apache 1.3.3. El servidor de web más utilizado en Internet, extensible, seguro y rápido, y portado a multitud de sistemas. · gestor de base de datos: PostgreSQL 6.3.2. Se ha elegido PostgreSQL en lugar de otros sistemas de base de datos semi-libres debido a su amplia licencia. Quizás otros sistemas de base de datos (como mySQL) puedan ser más rápidos pero PostgreSQL ofrece todas las capacidades necesarios para un desarrollo e implementación inicial. El cambio posterior de la base de datos a otro sistema de base de datos no será si en las herramientas desarrolladas se utilizan el estándares para comunicarse con la base de datos (JDBC, SQL..) 66.. IInnssttaallaacciióónn ddee llooss ccoommppoonneenntteess Gracias al sistema de paquetes usado por las distribuciones de GNU/Linux hoy en día permiten instalar los componentes comentados previamente sin mayor esfuerzo por parte del administrador. Simplemente seleccionando el componente e instalandolo, restando sólo hacer la configuración (que en la mayor parte de los casos vendrá hecha pero será necesaria adaptar a las necesidades específicas del usuario). En el caso de Debian GNU/Linux instalaremos los paquetes apache y postgresql. Podríamos comentar cómo hacer la instalación a partir de cero desde el código fuente distribuido por los proyectos de desarrollo, pero no se va a comentar aquí como hacerlo ya que ha sido previamente comentado para ambos componentes en esta misma revista. Dado que aún no hemos especificado la aplicación que vamos a realizar no entraremos aún en la configuración de estos componentes, sino que la dejaremos para más adelante. Nos bastará con ver que los componentes han sido correctamente instalados y funcionan. 77.. CCoommpprroobbaacciióónn ddee llaa iinnssttaallaacciióónn:: AAppaacchhee Para ver que efectivamente tenemos el servidor de web instalado y lanzado haremos lo siguiente: · Comprobaremos que existe el demonio que atiende a las peticiones y está actualmente ejecutándose. Para ello ejecutamos ps aux | grep apache. Que nos deberá mostrar el proceso ejecutándose. Si no aparece una lista de procesos lo deberíamos reiniciar con /etc/init.d/apache start (esto es para Debian GNU/Linux, otras distribuciones ponen los guiones para lanzar los demonios de otra forma. · Probaremos al servidor para comprobar que funciona conectándonos al puerto en que por defecto se instala el demonio, el puerto 80. Bastará con hacer un telnet localhost 80 y ver que efectivamente hay una conexión. Para cerrarla sin enviar pulsaremos Ctrl+5 lo que enviará el código de escape a la aplicación telnet y podremos cerrarla escribiendo close (más información man telnet) · Para ver que sirve adecuadamente páginas lanzaremos un navegador contra el servidor, escribiendo como dirección http://localhost/. Si el servidor ha sido adecuadamente lanzado veremos una página de muestra. En cualquier caso si vemos cualquier problema es recomendable acudir a la documentación. En el caso de Debian viene dentro del paquete apache-doc, y que, tras instalar, incluirá la documentación en /usr/doc/apache-doc. También es recomendable acudir a los registros del programa que se encuentran (en Debian) en /var/log/apache. 88.. CCoommpprroobbaacciióónn ddee llaa iinnssttaallaacciióónn ddee PPoossttggrreeSSQQLL Para probar la configuració de PostgreSQL vamos a utilizar uno de los interfaces de gestión que más adelante se comentarán, ya que se trata del más sencillo viene incluido con la distribución normal de PostgreSQL. Conviene comentar que Debian GNU/Linux viene con un usuario de gestión de la base de datos que es que el debe usarse para realizar la gestión de la misma: creación de usuarios de la base de datos y bases de datos. Mientras no se haya creado ningún usuario de base de datos que sea un DBA (_D_a_t_a_b_a_s_e _A_d_m_i_n_i_s_t_r_a_t_o_r) será necesario usar siempre éste. Por ello para probar la base de datos lo primero que haremos será "convertirnos" en este usuario haciendo, como superurusario, _s_u _- _p_o_s_t_g_r_e_s. Este usuario tiene como directorio _h_o_m_e el /var/postgres que es donde se van a encontrar todos los ficheros que utilice la base de datos. Tras esto haremos algunas pruebas: · De igual manera que para el servidor de web, la base de datos se lanza como un servicio llamado _p_o_s_t_m_a_s_t_e_r en un puerto determinado. Para ver si el servidor está lanzado haremos ps aux |grep postgres que nos deberá listar un proceso lanzado como usuario postgres. Si no es así quizás no esté lanzado (aunque el gestor de paquetes lo lanza al instalarlo) pero se puede lanzar con /etc/init.d/postgres start. · Ahora mismo no probaremos que nos podemos conectar al servidor ya que, posiblemente, aún no esté configurado para aceptar conexiones a través de TCP/IP. Si estuviera configurado se lanzaría en el puerto 5432 (ver /etc/services), y podríamos probarlo conectándonos mediante un telnet como antes. · Dado que posiblemente acepte sólo conexiones de usuarios de la misma máquina, probaremos a conectarnos con el interfaz de texto. Para ello ejecutaremos pgsql sin argumentos. Si nos da un _p_r_o_m_p_t del estilo de template1=> estará funcionando correctamente (saldremos con Ctrl+D o con "\q"). Si da un error posiblemente no esté funcionando. De la misma forma que apache, para cualquier problema debemos consultar la documentación, que en Debian se instala en el paquete postgres-doc, y los ficheros de registro que ahora estarán en /var/log/postgres.log. 99.. GGeessttiióónn ccoommoo uussuuaarriioo ppoossttggrreess Hay ciertas herramientas de gestión de la base de datos que son necesarias conocer para utilizarlas como usuario 'postgres'. Veremos más adelante su uso particular para la base de datos que se va a crear, pero no está de más recordarlas aquí. Al instalar la distribución de postgres, quedarán instalados en el directorio /usr/lib/postgresql/bin los programas que son necesarios para gestionar "desde cero" la base de datos. Estos programas estarán en el PATH del usuario postgres. Antes de nada es necesario tener clara una cosa del sistema de base de datos. Un sistema de base de datos es una colección de bases de datos administradas por el mismo usuario, físicamente el sistema así como cada base de datos, es una serie de ficheros pertenecientes al usuario y que el servicio _p_o_s_t_m_a_s_t_e_r se encarga de gestionar, en el caso de Debian estos ficheros se instalan por defecto en /var/lib/postgres/data. La ventaja de esta filosofía es que para mover la base de datos o hacer una copia de seguridad de ésta basta con copiar los ficheros de la misma. · cleardbdir: destruye todas las bases de datos instaladas. Sólo se utiliza cuando se quiere reinicializara el sistema de base de datos y es necesario para el demonio _p_o_s_t_m_a_s_t_e_r. · initdb: crea un nuevo sistema de base de datos, crea los directorios necesarios para el sistema y la base de datos _t_e_m_p_l_a_t_e_1 que se trata de la plantilla a través de la cual se generarán el resto de las bases de datos. En un sistema en el que se haya instalado correctamente la base de datos esto se habrá realizado ya y el usuario no tendrá que hacerlo. · initlocation: prepara un directorio para albergar el sistema de base de datos. · pg_passwd: permite manipular el fichero de contraseñas de la base de datos. Se trata de una aplicación similar al programa passwd pero para el sistema de base de datos. · pg_upgrade: permite actualizar el sistema de base de datos. Cuando se cambia de versión del sistema de base de datos es necesario actualizar los datos ya que sino serán incompatibles con el nuevo sistema. Este programa facilita el movimiento de una versión a otra. · pg_dump y pg_dumpall vuelcan (una base de datos en el caso del primero y todas las bases el segundo), las ordenes SQL necesarias en un fichero ASCII de forma que la base de datos se pueda recuperar a través de éste. Sin hacer uso de ninguna opción la base de datos será volcada con todos los datos incluidos. Al tratarse de SQL estándar, este mismo fichero puede usarse para crear de nuevo la base de datos en otro sistema de bases de datos, facilitando la migración a cualquier otro sistema. · pg_id: devuelve el identificador de usuario correspondiente al usuario administrador de las bases de datos. · createdb: crea una base de datos en nuestro sistema de base de datos. En realidad llama al interfaz pgsql para realizar esto. · createuser: crea un usuario reconocido en el sistema de bases de datos. Los usuarios del sistema de base de datos_n_o tienen por qué tener relación con los usuarios en nuestro sistema operativo, pudiendo haber usuarios distintos. · destroydb: elimina una base de datos. · destroyuser: elimina un usuario del sistema de bases de datos. El administrador de la base de datos necesita conocer estas herramientas para usarlas, si surge la necesidad. En particular, aquellas funciones que no se pueden hacer a través del interfaz, ya que la creación y destrucción de bases de datos y usuarios se podrá hacer con las herramientas de gestión que ahora se analizarán. 1100.. HHeerrrraammiieennttaass ddee ggeessttiióónn ddee llaa bbaassee ddee ddaattooss Antes de hacer nada en el sistema de base de datos, ni crear usuarios ni otras bases de datos, deberemos conocer primero qué programas podremos usar para la gestión de la base de datos: · pgsql: el interfaz en modo texto para acceder a la base de datos, permite realizar todas las funciones de acceso a una base de datos mediante órdenes SQL (teclear \h para acceder a la lista de todas las órdenes disponibles) y obtener también información del sistema de base de datos, como ver las bases de datos, los tipos de datos soportados, etc... para ver las órdenes disponibles teclear \?. · pgaccess (última versión 0.98.4): interfaz en Tcl/Tk que permite visualizar las tablas, crearlas mediante un formulario de forma rápida, etc.. Es el interfaz más evolucionado para postgresql aparte del interfaz textual. No son necesarios conocimientos de SQL para hacer uso de muchas de las funciones y permite administrar tanto la base de datos como los datos en sí de una manera eficaz. En el caso de Debian para instalarlo es necesario instalar el paquete libpgtcl. · gtksql (última versión 0.3): interfaz en Gtk a la base de datos. Muestra las tablas de la base de datos y permite hacer consultas SQL, visualizando el resultado en el mismo interfaz. Se trata de una herramienta aún en desarrollo pero que le puede resultar útil a un administrador para hacer tareas sencillas. · gasql: un interfaz en Gtk para PostgreSQL desarrollado para el proyecto GNOME, aún se encuentra en desarrollo, pero tiene algunas funcionalidades útiles. Estos programas nos van a ser útiles para poder acceder a la base de datos sin tener muchos conocimientos del funcionamiento de ésta, aunque nos va a ser imprescindible el conocimiento del lenguaje SQL, podemos utilizarlas en muchas situaciones. Existen otras herramientas como wisql y owd que el autor aún no ha probado, y serán comentadas en posteriores artículos. 1111.. SSiigguuiieenntteess aarrttííccuullooss En los siguientes artículos de esta serie vamos a analizar el desarrollo de una aplicación específica y a ver las herramientas necesarias para ofrecer un interfaz de acceso a nuestra base de datos mediante la WWW. Llevaremos a cabo el análisis de la aplicación así como su desarrollo y empezaremos a ver la ventaja de tener herramientas gráficas de gestión de la base de datos para detectar errores y depurar la aplicación. 1122.. SSuummaarriiooss 1133.. LLiissttaaddooss LISTADO 1- Para el lector interesado se recomienda buscar más información en diversos servidores de web. Estos son: · PostgreSQL: http://www.postgresql.org y su FAQ en http://www.postgresql.org/docs/. · Apache: http://www.apache.org · El HOWTO de PostgreSQL para Linux: http://metalab.unc.edu/LDP/HOWTO/PostgreSQL-HOWTO.html · PGaccess: http://www.flex.ro/pgaccess · gtksql: http://www.mygale.org/ bbrox/GtkSQL · gasql: http://www.gnome.org/applist También para seguir esta serie puede ser conveniente algún conocimiento de bases de datos generales. Se recomienda el libro de Silberschatz, Korth y Sudarsan: "Database Systems Concepts, III ed, Mc Graw-Hill, 1996." (http://www.bell-labs.com/topic/books/db- book/index.html) que también ha sido traducido al castellano, otro libro también recomendado es el de Ullman y Widom: "A First Course in Database Systems" de 1997 editado por Prentice-Hall (http://www-db.stanford.edu/ ullman/fcdb.html). Para el lector que quiera profundizar en SQL podrá encontrar muchos enlaces en la parte bibliográfica del HOWTO de PostgreSQL para Linux aunque también es recomendable el tutorial disponible en http://w3.one.net/ jhoffman/sqltut.htm PIE LISTADO 1:Servidores donde encontrar más información 1144.. CCaappttuurraass · postgresl.jpg: PostgreSQL es el sistema de base de datos libre más potente del mundo. · pgaccess.gif. PgAccess es un interfaz tremendamente útil para la gestión de nuestro sistema de base de datos. · gtksql.gif. Para los que quieran una simple "hoja SQL" gtksql es la herramienta a utilizar. 1155.. NNoottaass ddee mmaaqquueettaacciióónn 1166.. NNoottaass ddee ccoooorrddiinnaacciióónn