lunes, 13 de diciembre de 2010

SchemaSpy: Documentando tu base de datos

Sabemos lo importante que es generar y mantener una buena documentación de nuestro código fuente, al igual que de la estructura de nuestras bases de datos. 

Cuando iniciamos un proyecto nuevo se supone que antes de hacer algún cambio a la base de datos directamente, ya paso por un proceso de análisis y se plasmo en algún modelo, llámese Modelo Relacional, Entidad-Relación, UML, etc.

Pero aveces sucede que los cambios se hacen de manera directa, y con el tiempo se van olvidando detalles ó partes importantes de la estructura, en otros casos la base de datos ya fue generada por alguien más y te ha sido heredada sin documentación, aquí es donde entra la utilidad de ésta herramienta SchemaSpy (LGPL), la cual genera un diagrama Entidad-Relación de tu base de datos en formato HTML, permitiendo poder navegar entre las relaciones de las tablas mediante links. Aparte de representar las relaciones de una manera muy clara, también genera otros datos, como el número de tablas que dependen de cada relación, el número de filas, el número de columnas por tabla, una lista de todos los constraints, una lista de todas las columnas con su nombre, tipo de datos, tamaño, si es NULL o no, si es serial, su valor que tiene por default, y por si fuera poco un lista donde muestra posibles anomalías dentro de la base de datos.

Requerimientos:
SchemaSpy puede generar el diagrama de la mayoria de los gestores de bases de datos, solo se necesita su driver de conexión.



Es una herramienta para la linea de ordenes y su sintaxis básica es:
java -jar schemaSpy_5.0.0.jar -dp rutaDriver -t tipoGestor -db nombreBase -s esquema -host host -p contraseña -port puerto -u usuario -o directorioSalida

El resultado se vería algo como esto:


Para ver la documentación completa favor de ir a http://schemaspy.sourceforge.net/
Si deseas ver un ejemplo de como queda, puedes acceder a http://schemaspy.sourceforge.net/sample/

También existe la posibilidad de utilizar esta herramienta de manera gráfica mediante SchemaSpyGUI (LGPL) ésta tiene control completo de schemaSpy.  Para iniciar el programa solamente hay que escribir:
java -jar schemaSpyGUI.jar



lunes, 4 de octubre de 2010

Another PostgreSQL Diff Tool: Comparación de esquemas en PostgreSql.

Esta utilidad nos ayuda en la tarea de actualización de esquemas, la cual lo hace mediante la comparación de dos archivos de la estructura de la base de datos, como resultado se obtiene las sentencias necesarias (DDL) para actualizar la base antigua.

Another PostgreSQL Diff Tool (apgdiff), esta escrito en Java, es una aplicación para la linea de ordenes, su versión actual es la 2.2.1 y su tipo de licencia es MIT.

Su sintaxis de uso es:
java -jar apgdiff-<version> [options] <old_dump> <new_dump>
Básicamente necesita dos parámetros para ejecutarse, el primero es el dump del esquema de la base de datos original (podria ser la que esta en producción), el segundo es el dump del esquema de la nueva base de datos (la de desarrollo).

Ejemplo de uso:
jurasec@jurasec:~$ apgdiff test_produccion.sql test_desarrollo.sql

CREATE SEQUENCE clientes_id_seq
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO MINVALUE
CACHE 1;

CREATE TABLE clientes (
id integer DEFAULT nextval('clientes_id_seq'::regclass) NOT NULL,
descripcion text,
contacto text
);

ALTER TABLE articulos ADD COLUMN fecha_registro timestamp without time zone DEFAULT now();

ALTER TABLE clientes ADD CONSTRAINT clientes_pkey PRIMARY KEY (id);

La base de datos original solo tienen una tabla:
CREATE TABLE articulos (
    id integer NOT NULL,
    descripcion text,
    precio numeric(15,2)
);

ALTER TABLE articulos ALTER COLUMN id SET DEFAULT nextval('articulos_id_seq'::regclass);
La salida puede ser redireccionada a un archivo:
jurasec@jurasec:~$ apgdiff test_produccion.sql test_desarrollo.sql > test_ddl_diff.sql
Apgdiff no soporta todas las sentencias DDL actualmente (por ejemplo los parametros SET, GRANT, REVOKE, CREATE TYPE, ALTER SEQUENCE, etc), por lo tanto hay que tener en cuenta cuales son las que si están soportadas, para evitar cualquier tropiezo. Puedes usar la opción --output-ignored-statements, para ver que sentencias fueron ignoradas por apgdiff al crear el archivo de las DDL de actualización.

Para Debian, Ubuntu y Gentoo, existen paquetes para instalarlo directamente desde sus repositorios, también puede ser descargado desde sourceforge.

Para más información visitar su página.

jueves, 30 de septiembre de 2010

Como dar formato de moneda a un número en PostgreSql.

Para mostrar el formato deseado usaremos to_char, dicha función es muy buena para dar diferentes tipos de formatos a un valor, gracias a los patrones que se pueden aplicar.
Bueno la idea es que teniendo un número como 3456789, obtengamos $3,456,789.00

test@[local]=# select to_char(3456789,'LFM9,999,999.00') as formato;
    formato   
---------------
 $3,456,789.00
(1 fila)

Duración: 0.483 ms

El modificador L agrega el símbolo de moneda (este dependiendo de las locales configuradas).
El prefijo FM (Fill Mode) hace que se eliminen los ceros y espacios en blanco, pero no funciona si en lugar de 9 se escriben 0, por eso al final la cadena de formato termina con *.00, no con 9, de lo contrario se obtendría:

test@[local]=# select to_char(3456789,'LFM9,999,999.99') as formato;
   formato 
-------------
 $3,456,789.
(1 fila)

Duración: 0.451 ms

viernes, 30 de abril de 2010

Actualizador y Lanzador de Aplicaciones Escrito en Java.

He creado una aplicación muy básica en java, la cual se encarga de manter actualizados los sistemas que tenemos, descargando las nuevas versiones de los archivos a través del ftp, al final de la actualización, lanza el sistema.

Su configuración es desde un simple archivo de texto plano (params.conf), el cual contiene los siguientes parámetros:
username:nombre_usuario_ftp
password:contraseña
port=21
exe:si
path_exe:c:\ruta\ejecutable.exe
El parámetro "host", indica cual es el servidor ftp al que debe conectarse, "username" es el usuario ftp, "password" es la contraseña asociada, el puerto del servidor va configurado en "port". El parametro "exe" sirve para decirle si al final de la actualización debe o no lanzar algún ejecutable, el cual se define en "path_exe". Si los parametros host,username y password, no tienen valor, serán pedidos al usuario durante la ejecución.

lunes, 26 de abril de 2010

Convertir el contenido de un archivo de minúsculas a mayúsculas.

Pues me surgió la necesidad de convertir a mayúsculas un buen número de archivos, primero pensé en realizar un programa en algún lenguaje de programación, después cambié de opinión y opté por hacer un script en bash, suponiendo que me seria más rápido y fácil hacerlo, entonces intente primero con tr:
echo "aeiou-xyz" | tr '[a-z]' '[A-Z]'
AEIOU-XYZ
Hasta ahí parece que todo va bien, pero hay un inconveniente, cuando las palabras tienen acentos, no funciona bien, las letras que tienen acento, se quedan como estan originalmente, lo mismo pasa con awk:
echo "aeiouáéíóú" | awk '{print toupper($0);}'
AEIOUáéíóú
Bueno al final, después de documentarme un poco más llegue a una solución para salir del problema:
#!/bin/bash
for file in *
do
    tr '[a-z]' '[A-Z]' < $file | sed 'y/áéíóú/ÁÉÍÓÚ/' > /ruta/carpeta/salida/$file
done
----
NOTA: Como mi blog publica los artículos en el buzz, un amigo (Jose Luis Balle) ha dado una solución aún más simple usando solo tr:
echo "áaeóiou-xyz" | tr '[a-z][áéíóú]' '[A-Z][ÁÉÍÓÚ]'
ÁAEÓIOU-XYZ

martes, 13 de abril de 2010

AeroSQL - Administración Web para MySql

AeroSQL es una aplicación web libre (GPLV3), para administrar servidores MySql, el cual esta escrito en php y el framework Ext JS. La característica principal de este producto es que su gestión es muy intuitiva. Si deseas puedes probarlo.  Usuario: demo y contraseña demo.


Características principales:
  • Administración multiservidor.
  • Live Queries: Si se realiza una consulta a una única tabla y tiene un índice único, AeroSql le permitirá actualizar el conjunto de resultados, es decir, el resultado no es de sólo lectura (El índice único con el menor número de columnas es usado. Si la tabla no tiene un índice único, todas las columnas son utilizadas como índice).
  • SQL Monitor: Puedes ver todos los comandos SQL emitidos por el script de lado del servidor.
  • Ejecución de múltiples consultas: Puedes ejecutar un lote de instrucciones SQL delimitadas por un punto y coma.
  • Corrección para el manejo de valores NULL.
  • El usuario puede elegir que columnas desplegar para editar la tabla, con esto, al navegar entre las filas, la búsqueda sera solo sobre las columnas visibles, reduciendo el trafico de red.
  • Proporciona edición de columnas basada en los tipos de datos de MySql.
    • Los tipos de datos ENUM son mostrados dentro de una caja de selección.
    • El editor de columnas tipo TEXT es una ventana separada con una área de texto y un editor HTML WYSIWYG.
    • Columnas Numeric no permiten ingresar letras, incluso tampoco números negativos si la columna fué definida como UNSIGNED.
  • Facil uso

miércoles, 7 de abril de 2010

Configuración de nail para el envío de correos mendiante gmail

Debido a la tediosa y necesaria tarea de hacer respaldos de las bases de datos, cree un script sumamente sencillo que hiciera la labor. Para ello, instale nail como cliente de correo (el servidor tiene Ubuntu Hardy 8.04 LTS );

sudo apt-get install nail (si que me costo)

Posteriormente, hay que agregar unas lineas al archivo de configuración ubicado en /etc/nail.rc
set smtp=smtp://smtp.gmail.com:587
set smtp-use-starttls
set smtp-auth=login
set ssl-verify=ignore
set smtp-auth-user=[usuario]@gmail.com
set smtp-auth-password=[contraseña]
Probando configuración:

echo "mensaje mensaje mensaje mensaje" | nail -s "asunto" [usuario_destino]@[servidor].com

Ya teniendo nail listo, y el script que hace los respaldos, programé la tarea para que se ejecute dos veces por día. El script el cual hace el respaldo de dos bases de datos y de los roles quedó de la siguiente manera;