Es una tarea que tenía pendiente desde hace tiempo, pero después de que mi amigo Pablo me comentara que lo había compilado en su Freidora Fedora y que funcionaba bastante bien me decidí a ponerlo.
Para poder depurar código en Postgresql hay que instalar una extensión en el servidor. El problema es que esta extensión viene en forma de código fuente que hay que compilar, y para poder compilarlo necesitamos hacerlo contra el código de Postgresql, así que lo primero que hay que hacer es instalar el paquete postgresql-server-dev-8.4 (en mi caso 8.4 porque es la versión soportada por Openbravo 2.50).
Se suponía que con este paquete era suficiente ya que trae todos los archivos de cabecera necesario para compilar las extensiones de Postgresql, pero la verdad es que a mi no me funcionó, seguramente porque el código de la extensión espera encontrarse los fuentes de Postgresql en el formato que tiene cuando lo descargamos desde su página web. Lo que hice entonces fué descargame el código fuente desde la página de Postgresql.
Primero tenemos que saber qué versión de Postgresql estamos ejecutando. Podemos verlo por ejemplo desde el gestor de paquetes.
dpkg -l | grep postgresql-8.4
ii postgresql-8.4 8.4.9-0ubuntu0.11.04 object-relational SQL …
Ahora tenemos que descargar dicha versión.
wget http://ftp.postgresql.org/pub/source/v8.4.9/postgresql-8.4.9.tar.bz2
Descomprimimos y desempaquetamos.
tar xvfj postgresql-8.4.9.tar.bz2
Ahora tenemos que ejecutar el configure, pero para saber las opciones con las que se compiló nuestro servidor de postgres en ejecución podemos apoyarnos en la orden pg_config.
pg_config –configure | ./configure
Luego compilamos con make y ya tenemos el código de Postgresql preparado para compilar nuestra extensión.
Nota: No he indicado las librerias de desarrollo necesarias para compilar Postgres porque dependerá de vuestra instalación.
El siguiente paso es descargar el código de la extensión y copiarlo al directorio contrib. El problema es que la última versión disponible no compila correctamente pero si la última versión del cvs, así que utilizaremos esta última.
cd contrib
cvs -d :pserver:anonymous@cvs.pgfoundry.org:/cvsroot/edb-debugger login
cvs -d :pserver:anonymous@cvs.pgfoundry.org:/cvsroot/edb-debugger checkout server
Actualización: Ahora el proyecto está en un repositorio git.
http://git.postgresql.org/gitweb/?p=pldebugger.git;a=summary
Esto nos generará un directorio que se llama server, entramos en él y hacemos make.
cd server
make
Si todo ha ido bien ya tenemos la extensión compilada, ahora sólo nos queda hacer un make install como root.
Nos quedan dos cositas para que la extensión funcione, la primera es cargarla en el arranque de Postgresql. Editamos el archivo postgresql.conf de nuestro servidor y añadimos la siguiente linea.
shared_preload_libraries = ‘/usr/lib/postgresql/plugins/plugin_debugger’
Nota: la ruta puede cambiar dependiendo de la instalación.
La segunda cosa que hay que hacer es abrir pgadmin y ejecutar el script sql que encontraremos en el archivo pldbgapi.sql del código de la extensión. Pero antes deberemos substituir cada aparición de $libdir por «/usr/lib/postgresql» para que funcione.
El depurador es un poco limitado pero nos permite hacer cosas chulas como la siguiente.
Ahora ya podéis depurar vuestro código.
Cheli