Generando código QR desde PostgreSQL

Hace un tiempo atrás publicaron en planeta postgres  una entrada que tenia una extensión que generaba código QR desde PostgreSQL, la cual me dediqué a probar y se puede descargar desde aquí, me resultó fantástica y les dejo como utilizarla.

Una vez descargado lo descomprimimos:


tar -xvf qrcode.tar.bz2

Sigue leyendo

¿Donde esta mi IP desde PostgreSQL?

En esta entrada anterior les mostré un ejemplo de como se pudiera consumir un webservice o algún otro servicio de internet. Un caso útil pudiera ser consumir los servicios de localización de IP que se pueden brindar como lo es freegeoip.net. En este caso no quiero consumir webservice y me encuentro con la extensión http://pgxn.org/dist/geoip, la cual tiene esa información local en el servidor de base de datos.

Sigue leyendo

DIAGRAMA RELACIONAL desde PostgreSQL(Ingeniería Inversa)–parte 2: postgresql_autodoc

En entrada anterior les mostré alguna forma de obtener el Diagrama Relacional de una base de datos PostgreSQL script personalizado , en esta pretendo mostrarle otra, que como las ateriores es muy fácil de utilizar, en este caso se llama  postgresql_autodoc, pues manos a la obra y veamos como se utiliza:

Instalamos la herramienta y sus  dependecias: Sigue leyendo

Haciendo Chequeo a las funciones plpgsql

Hace un tiempo hice una publicación donde explicaban como se podía “profiler” y “debugger” a las funciones plpgsql, lo cual puede ser muy útil, pero incluso con esas funcionalidades se nos puede ir errores de programación dentro de las funciones. Pero que es que es el “Chequeo”, es algo así como un control de las funciones donde te dice posibles errores y sugerencias, que no salieron a la vista pues nunca el camino de tu código tomó por ahí pero sistemáticamente está correcto o no había en tiempo de compilación como verificar un valor o una característica.

Por ejemplo si creamos la función mensaje1: Sigue leyendo

Saber el clima de mi ciudad o pueblo desde PostgreSQL

Hoy desperté con un frió al cual no estoy acostumbrado pues ando radicando fuera del lugar donde me nací y me crié, y quise averiguar como estaba la temperatura en mi “ciudad” o “pueblo”, rápido fui al servicio de  Openweathermap y supe que había un calor aceptable(25 grados celcius) :D. Luego de esto se me ocurrió ver como saber esto mismo pero desde PostgreSQL, y entonces puse manos a la obra.

Para el desarrollo de esto utilicé plpython, el cual me posibilita aprovechar las opciones que me brinda python de desarrollo dentro de PostgreSQL y todo esto gracias a la extensibilidad del gestor :D, si desea conocer un poco de plpython puede ir a la Documentación oficial de PostgreSQL o a la entrada libro PL/pgsql y otros lenguajes de procedulares en PostgreSQL, descargar el libro y leer el Capítulo 4. Para consultar el clima aproveché la API que brinda openweathermap.org, y le pasé los parámetros pertinentes.

Pues comencemos a ver como saber la temperatura de una o varias ciudades: Sigue leyendo

Haciendo Debugger a una función plpgsql

En la entrada anterior les comenté como hacer “Profiler” a una función plpgsql, lo cual puede ser muy beneficioso para conocer picos de trabajo de cada línea de una función plpgsql. En esta les traigo como hacer “Debugger” a dichas funciones, todos seguro hayamos hecho esta actividad en algún lenguaje, y conocemos que no es más que recorrer el código y ver que caminos toma el mismo y que valores tomas las diferentes variables. El “debugger” combinado con el “Profiler” puede ser útil para poner a punto una función plpgsql.

PostgreSQL tiene la forma de hacer debuger también y utilizando una extensión llamada pldebugger y tiene una buena integración con el PgAdmin3, la misma hay que instalarla en el servidor PostgreSQL y reiniciarlo para que tome los cambios que necesitamos, luego en el PgAdmin3 podemos utilizarla. Sigue leyendo

Haciendo Profiler a una función plpgsql

En varias ocasiones nos ha tocado hacer “Profiler”  a algún código que hemos realizado o han realizado otros, pero que es el “Profiler o Profiling”, no es más que es análisis  del comportamiento de un programa  o código,  con el objetivo de averiguar el tiempo dedicado a la ejecución de diferentes partes  para detectar los puntos críticos.

Lo que les traigo acá es una de las maneras de como hacer Profiler en PostgreSQL, no es la única, pero me ha llamado mucho la atención por su sencillez y la utilidad que puede brindar, específicamente en las funciones PLPGSQL, utilizando una extensión llamada plprofiler. Es promocionada y al parecer mantenida por la empresa openscg y publicada en su repositorio, la última actualización de la extensión es de 2015-02-15, y nos brinda una vista que muestra el oid, linea, veces de ejecución, el tiempo total de ejecución y el tiempo  que más se demoró esa línea, si así mismo como menciono, toda esa información. En este momento es posible que dirán  “WOW todo eso puede ser genial, como no lo había visto antes”, :D, pues conocer que sucede en el interior de una función plpgsql puede ser complejo, a no ser por los Raise Notice y algún que otro truco, pero puede resultar torpe pues necesitamos colocar ese código dentro la función para hacer “Profiler” y puede ensuciar el mismo.

PLPROFILER al rescate Sigue leyendo

DIAGRAMA RELACIONAL desde PostgreSQL(Ingeniería Inversa)

Cuantas veces nos ha sucedido que necesitamos analizar una bases de datos que no hemos diseñado y tampoco hay documentación sobre el modelo utilizado, o tal vez la diseñamos pero no nos acordamos o no documentamos el modelo. Para esta actividad hay varia herramientas que te permiten hacer ingeniería inversa, entre ella esta el Visual Paradigm o  E/R studio de embarcadero, entre otras, pero que son privativas. Según en este Blog, existen algunas libres, como son Open System Architect 4.0.0 o SQL Power Architect 1.0.6, las cuales no he utilizado.

Resulta que recientemente me llegó por correo electrónico que existe una biblioteca en python que permite dicha actividad de forma muyyyyy sencilla, pues me puse a probar y la verdad me resultó fantástica y sencilla, incluso me hice un script,  :D, donde le paso unos parámetros y me construye una imagen(.png) con el diagrama de las tablas. Esta biblioteca de python utiliza la relaciones de las llaves foráneas para obtener las relaciones de las tablas.

 Pues mano a la obra, lo primero es instalar las dependencias necesarias: Sigue leyendo

Control de versiones de bases de datos PostgreSQL con apgdiff

Se liberó una versión de la base de datos y se puso esa versión en producción y luego se hicieron modificaciones estructurales en desarrollo, pero fueron tantos que no se sabe con exactitud lo que se cambió”, esto casi seguro nos ha pasado a varios. Es decir un escenario muy común es tener una versión de la base de datos en producción y otra en desarrollo. Para los que trabajan con PostgreSQL (donde me incluyo :D), existen algunas herramientas para llevar el control de las versiones, personalmente he utilizado apgdiff, la cual esta desarrollada en java y es bien sencilla de utilizar, en resumen lo que hace es analizar dos script de bases de datos PostgreSQL y retorna las diferencias entre el primero y el segundo, donde esas diferencias son las que se aplican  para llevar a cabo los cambios en la base de datos. Ejemplificando el uso de apgdiff: Sigue leyendo

JSONB un JSON superior en PostgreSQL

Hace unos días me puse a trabajar con el tipo de dato JSONB de PostgreSQL, nuevo desde la versión 9.4, el mismo me ha resultado fantástico y superior a su primo JSON presente en PostgreSQL desde la versión 9.2, muestra evidente de la evolución del gestor hacia funcionalidades y características cada vez mejor, y al nivel de los requerimientos de la actualidad.

Comencemos con algunas pruebas para ver las ventajas de este nuevo tipo de dato:

Creamos dos tablas similares, solo cambia el tipo de dato:


create table tablajson (atributo JSON);
create table tablajsonb (atributo JSONB);

Se insertaron un total de 100000 tuplas.

INSERT INTO tablajsonb

SELECT row_to_json(consulta)::JSONB FROM (SELECT 'Nombre'||round((random() * 100)::numeric,0)::text||' Apellido'||round((random() * 100)::numeric,0)::text as nombre_apellidos,

round((random() * 100)::numeric,0) as edad,round((random() * 9)::numeric ,2)as porciento FROM generate_series(1,100000) ) consulta;

INSERT INTO tablajson

SELECT row_to_json(consulta)::json FROM (SELECT 'Nombre'||round((random() * 100)::numeric,0)::text||' Apellido'||round((random() * 100)::numeric,0)::text as nombre_apellidos,

round((random() * 100)::numeric,0) as edad,round((random() * 9)::numeric ,2)as porciento FROM generate_series(1,100000) ) consulta;

Soporte de operadores

Sigue leyendo