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

Puede que antes de compilarlo e instalarlo haya que modificar en el archivo Makefile la linea de:

PG_CONFIG = /opt/pgsql/9.4/bin/pg_config por PG_CONFIG =pg_config o por donde quiera que este su pg_config

Luego lo compilamos e instalamos


make
sudo make install

Una vez instalado vamos a la una BD y lo instalamos:

CREATE EXTENSION qr;

La misma posee una función  llamada qr(text, int,int,int) que según la documentación describe lo siguiente

SELECT qr('QR Code with PostgreSQL', 0, 0, 4);

Arguments:

  1. Text to be encoded.
  2. Error correction level (0 to 3).
  3. Accepted model number (0 to 2).
  4. Scale 4 means: a dot in QR image will be 4 pixel width and 4 pixel height.

Y retorna un bytea con un mapa de bit con  el texto  codificado.

Nos creamos una tabla para guardar los códigos con la siguiente estructura


CREATE TABLE qrcodes(id text, qrcode bytea);

y comenzamos a utilizar de la forma siguiente:

INSERT INTO qrcodes(id,qrcode) SELECT 'anthony',qr('anthony', 0, 0, 4);

 

Luego nos creamos este Script en python para leer la imagen y comprobar que código en QR correctamente


import psycopg2,sys
def escribirrimagen(imagen,datos):
 try:
  fout = open(imagen,'wb')
  fout.write(data)
 except IOError, e:
  print "Error %d: %s" % (e.args[0], e.args[1])
  sys.exit(1)
 finally:
  if fout:
   fout.close()

con = psycopg2.connect(database="bdconlaext", user="postgres",port="5432",password="password",host='localhost')
cur = con.cursor()
cur.execute("select qrcode from qrcodes where id ='"+sys.argv[1]+"'" )
data = cur.fetchone()[0]
escribirrimagen("codigoqr.bmp",data)
con.commit()
print "Imagen leida de la BD  y escrita en codigoqr.bmp"

Ejecutamos:

 

python script.py anthony

 

Y obtenemos la imagen siguiente:

codigoqr

La cual si la escaneamos con algun lector QR no arrojara «anthony».

Así de simple puedes utilizar esta extensión para generar códigos QR de PostgreSQL, la cual desde mi punto de vista me parece fantástica.

Nos vemos en otra 😉

3 comentarios en “Generando código QR desde PostgreSQL

  1. Usándola en Postgresql 9.5 no ha funcionado correctamente. La primera vez, desde una ventana SQL Query, si ejecuta correctamente la función y genera un BMP válido. La segunda vez puede haber una variación del resultado y en las subsecuentes ejecuciones también, por lo que el QR generado es distinto. Pero si se abre una nueva ventana de SQL Query la primera vez vuelve a generar un resultado correcto.

    Cuando se trata de utilizar en subquerys para actualizaciones masivas se podría obtener el mensaje de «Error encoding» o bien colgar el servidor Postgresql.

    Me gusta

Deja un comentario