jueves, 3 de abril de 2014

Postgresql: Cómo instalar pldebugger. Debug con pgAdmin

Hoy tenía que hacer seguimiento a unas funciones en PostgreSQL, de antemano sabía que me iba a tomar buen tiempo y jugar con raise notice no es algo que me guste mucho, así que se me ocurrió averiguar si existe un debugger para el PgAdmin, y que creen? Pues que existe!
Encontré muy buenas instrucciones en un blog, les dejo la dirección aquí, pero faltaban un par de detalles así que copiaré las instrucciones a seguir. Lo olvidaba, uso PostgreSQL 9.1 sobre Debian 6, en una máquina virtual, las instrucciones deben ser similares para otros entornos.
En términos generales:  Para poder depurar código en Postgresql hay que instalar una extensión en el servidor, pero esta extensión viene en forma de código fuente que hay que compilar, (está alojada en git) y para poder compilarlo necesitamos hacerlo contra el código de Postgresql, así que lo primero que hay que hacer es descargarlo.

  • Es necesario saber la versión de postgresql que estamos ejecutando, el comando es: psql -version.
  • Descargar el código fuente desde este vínculo, descomprimir y desempaquetar. Quizás sea necesario instalar bzip2: apt-get install bzip2
  • Te ubicas en la carpeta que tiene el código descomprimido y a configure le pasas los mismos parámetros que ya tienes en tu instalación local, pg_config –configure | ./configure
  • En la misma carpeta es necesario hacerle make, en mi caso tuve que hacer apt-get install libreadline5 libreadline5-dev y apt-get install zlib1g zlib1g-dev antes de que funcione.
  • Una vez listo el código fuente del postgresql se debe descargar el código fuente del plugin dentro de la carpeta contrib de las fuentes de postgresql, es necesario tener instalado Git: apt-get install git el comando para descargar el plugin es: git clone http://git.postgresql.org/git/pldebugger.git
  • Se creará la carpeta contrib/pldebugger te ubicas allí y compilas con make.
  • Copias el archivo pldebugger/plugin_debugger.so/usr/lib/postgresql/9.1/lib/
  • También copiar pldebugger/pldbgapi.control a /usr/share/postgresql/9.1/extension/
  • Finalmente pldebugger/pldbgapi--1.0.sql a /usr/share/postgresql/9.1/extension/ 
  • Luego hay que editar el archivo de configuración del postgresql: nano /etc/postgresql/9.1/main/postgresql.conf
  • Hay que modificar la línea shared_preload_libraries = ‘ ‘  por shared_preload_libraries = ‘$libdir/plugin_debugger’
  • Reiniciar el servidor postgresql.
  • Ahora lo que queda es abrir el pgAdmin y ejecutar 'CREATE EXTENSION pldbgapi;' en la base de datos que quieras depurar.
Para quienes tienen la misma configuración que yo (básicamente la versión 9.1 de postgresql), en esta dirección he guardado los tres archivos generados por la compilación del código de la extensión (y que son los que nos interesan), solo es necesario copiarlos en las rutas detalladas arriba, y listo, desde el PgAdmin podrán hacer debug de funciones.

lunes, 28 de octubre de 2013

PostgreSQL: streaming replication


Hace años me hablaron de PostgreSQL, como parte de una movida muy fuerte de software libre. Pensé que pasaría lo mismo que con Linux vs Windows, que en determinados entornos y para algunos requerimientos aún no llega a despegar, así que no le presté mucha atención.
Hace unos meses estoy participando en un proyecto interesante, implementando un sistema basado en postgresql para una organización. Hechas las primeras presentaciones debo decir que me llevé una buena sorpresa: no solo hace lo que promete, sino que lo hace fácil.
Uno de esos ejemplos es la configuración de un Standby Server. Con ayuda de un amigo muy metido en esto logramos configurar fácilmente un servidor de respaldo, aunque la documentación es buena: warm-standby siempre es bueno contar con alguna ayuda extra. Es tan interesante esta lectura que acabo de encontrar unos funciones que ayudan a monitorear la salud de la replicación.
Streaming Replication es una característica disponible desde PostgreSQL 9.0, anteriormente se realizaba con algunas herramientas aún disponibles, pero siempre es mejor tener el paquete completo. Aquí dejo la documentación para montar un entorno de alta disponibilidad. Hemos hecho las pruebas de recuperación (que sigue siendo un proceso manual) y quedó espectacular. La configuración necesaria para poner en línea el servidor de respaldo no pasa de comentar un par de líneas y reiniciar el servicio.
¿Lo siguiente? Dos cosas: (i) Tengo que revisar la replicación síncrona y (ii) usar el nodo secundario como sólo lectura.
Para que la replicación asíncrona funcione mejor debo asegurar que la tasa de pérdida de WAL sea muy baja, ya que el servidor secundario está conectado por un radioenlace esto puede tener algunos inconvenientes, lo mejor es medir el ancho de banda disponible realmente, para así poder hacer algunos "ajustes menores". Justamente de eso tratará la siguiente entrada, cómo medir el ancho de banda entre dos nodos.