No sé si es un caso muy habitual, pero tengo que
trabajar con un ERP que no tiene una estructura de datos muy bien normalizada,
este funciona con una base datos SQL SERVER. Me puse de tarea confeccionar
vistas que con una estrutura más sencilla, pero como no conozco a profundidad el SLQ SERVER no quiero arriesgar la estructura existente en este
servidor y tampoco me quiero tomar el tiempo de aprender la sintaxis ni nada de
SQL SERVER.
Entonces comencé a analizar a la posibilidad de vincular las
tablas de SQL SERVER con una base de datos Postgres y me topé que esto es
posible. Todavía no puedo hablar sobre el rendimiento de esta arquitectura,
pero si le dejo un resumen de cómo hacerlo.
La tablas las he vinculado con ODBC FDW (ODBC Foreign Data
Wrapper) que es una extensión de Postgres incluida desde las versión 9.
Pueden buscar los archivos necesarios para continuar, en el artículo
ODBC Foreign Data wrapper - odbc_fdw on Windows del sitio www.postgresonline.com,
que de hecho es el sitio de donque saqué la información que ahora comparto desde aquí.
Para instalar la extensión:
- Descomprimir el archivo fdw_winXX_91_bin.zip, que tiene adentro las carpetas bin, lib y share.
- Copiar las carpetas bin, lib y share al directorio donde tienen instalado el PostgresSQL. Se darán cuenta que están copiado correctamente las carpetas pues estás ya existen (Deberán fusionarlas).
- Ingresar al PdAdmin (u otro cliente que utilizan) con el el usurio “postgres” y abrir un pantalla para realizar Querys SQL.
- Ejecutar “CREATE EXTENSION odbc_fdw;”
Ahora tenemos que vincular las tablas, para esto me basé en
el artículo ODBC Foreign Data wrapper to query SQL Server on Window - Part 2.
- Ingresar a la opción “Orígenes de Datos ODBC” desde el menú de Windows.
- Crear un nuevo Origen de Datos, en la pestaña “DNS Sistema”. (Crear un Origen de Datos es un tema a tratar a parte) y por ahora asumo que ya lo saben, el dato importante que utilizaremos a continuación es el nombre que le han asignado al “Origen de Datos”. Recomiendo busquen el driver ODBC para SQL SERVER más actualizado que sea posible según su versión de Base de Datos.
·
A partir de aquí lo hacemos nuevamente desde una
pantalla de Querys de PgAdmin.
- Creamos un Servidor Foráneo con la siguiente sentencia, este servidor es como una referencia a la conexión ODBC desde el Postgres.
CREATE
SERVER <NombreServerDesdePG> FOREIGN DATA WRAPPER odbc_fdw OPTIONS (dsn '<NombreConexionODBC>');
- Mapeamos un “Login Role” o los que sean necesarios con un usuario de la Base de Datos SQL SERVER. En mi caso cree un único usuario en ambas bases, y con eso manejo perfecto desde la aplicación.
FOR <UsuarioPostgres>
SERVER
<NombreServerDesdePG>
OPTIONS
(username '<UsuarioSQLServer>', password '<PassSQLServer>');
- Es recomendable pero no obligatorio que creen un esquema donde podrán todas las tablas foráneas.
CREATE SCHEMA <TablasForaneas>;
- Creamos las “Tablas Foraneas” que son las que accederán por debajo a las tablas SQL SERVER según la Query que le asignemos, y desde el Postgres las llamamos como una tabla cualquiera.
CREATE FOREIGN TABLE
<TablasForaneas>
.<NombreTablaPostgres>
(orderid integer NOT NULL
, customerid varchar(20) NOT NULL )
SERVER <NombreServerDesdePG>
OPTIONS (database '<NombreDBSQLSERVER>', schema '<SchemaSQLServer>', sql_query 'SELECT orderid, customerid FROM orders', sql_count 'select count(orderid) from orders');
Listo!, ya deberíamos poder acceder los datos que devuelve
el query ejecutado sobre el SQL SERVER desde la tabla
<TablasForaneas>.<NombreTablaPostgres>
en Postgres.
Les dejó aquí una minúscula aplicación que crea este script
por nosotros, lo único que deberán hacer es definir la estructura de la SQL
SERVER. La aplicación creará el script en C:/ (Ya veré más adelante para
mejorarla).
Espero sea de utilidad para alguno que otro, que también esté
con esta necesidad.
Este comentario ha sido eliminado por el autor.
ResponderEliminarHola se pueden hacer a vistas en lugar de tablas?
ResponderEliminarno esta la aplicacion :(
ResponderEliminar