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:


sudo apt-get install graphviz-dev python-pygraphviz python-psycopg2
pip install eralchemy

Luego nos descargamos este script *(ver OJO al final):

__author__ = 'anthony'
# -*- coding: 850 -*-
from eralchemy import render_er
import getpass
import psycopg2

salida = False

while not salida :
 print 'Entre las credenciales del servidor--->'
 servidor = raw_input("Entre servidor : ")
 puerto = raw_input("Entre el puerto : ")
 basedatos = raw_input("Entre el la base de datos: ")
 usuario = raw_input("Entre el usuario: ")
 contrasena = getpass.getpass('Password')
 try:

  cadena = 'postgresql+psycopg2://'+usuario+':'+contrasena+'@'+servidor+':'+puerto+'/'+basedatos
  render_er(cadena, 'salida.png')
  print 'El modelo se encuentra en el archivo salida.png'
  salida=True
 except Exception, e:
  print u'Verifique los parametros de conexión'
  print str(e)

Lo ejecutamos python nombre_script.py, entrando los respectivos parámetros, y la salida es una imagen (salida.png),la prueba que realicé la hice con la clásica base de datos Dell Store 2 y obtengo este modelo:

salida

Esta biblioteca escoge el primer valor del search_path, por ende para obtener el modelo de todos los esquemas de la bases de datos debemos ir cambiando el valor del search_path en el archivo postgresql.conf poniendo el esquema que necesitamos obtener, pero si una tabla de ese esquema depende de otra de otro esquema, igual el la obtiene.

Según mi criterio este script resulta ser muy útil y para hacer ingeniería inversa a las bases de datos sobre todo PostgreSQL, de forma muyyy sencilla, además puede ajustarse a cualquier otra como mysql, solo modificando el driver de sqlalchemy, pues la biblioteca publicada aquí lo permite.

Recomiendo también :   Parte 2

Bueno es todo por el momento, y a probar hacer ingeniera inversa a las bases de datos PostgreSQL 😀

* OJO: Recomiendo que al copiar el código del script publicado aquí se verifique la indentación de python.

14 comentarios en “DIAGRAMA RELACIONAL desde PostgreSQL(Ingeniería Inversa)

  1. Hola, estoy intentando utilizar tu script para hacer ingeniería inversa a una bodega de datos y me sale un error de sintaxis por el render_er a pesar que descargue la librería y todo como lo indicar. Si puede echarme una mano con ese error, gracias.

    render_er(cadena, ‘salida.png’)
    ^
    SyntaxError: invalid syntax

    Me gusta

    • Estimada(o), yo lo ejecuto acá sin problemas, el error que da python es error de sintaxis, por favor envieme su script si desea a ver que tal, puede que sea problemas de las comillas o algo simple, si puede también envíeme los pasos que hizo para ver si le falto algo.
      esperando su respuesta

      Me gusta

  2. hola que tal tengo una consulta soy nuevo en esto de python con tu código tengo dudas en esta parte.
    try:

    cadena = ‘postgresql+psycopg2://’+usuario+’:’+contrasena+’@’+servidor+’:’+puerto+’/’+basedatos
    render_er(cadena, ‘salida.png’)
    print ‘El modelo se encuentra en el archivo salida.png’
    salida=True
    podrias ser tan amable de ecplicarme esa parte y lo que hace la palabra clave render_er

    Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s