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