Linked Server a Postgres
Que tal, me preguntaron acerca de como hacer un Linked Server de una instancia de SQL Server a una base de Postgres, buscando encontre una excelente referencia de como hacerlo pero a través de OPENROWSET.
Referencia : http://www.postgresonline.com/journal/archives/103-Using-Microsoft-SQL-Server-to-Update-PostgreSQL-Data.html
Antes que nada, primero buscaremos un Provider para poder leer la base de datos de Postgres, para ello lo descargaremos de la siguiente ruta
http://www.postgresql.org/ftp/odbc/versions/msi/
Nota : Los archivos que estan ahí son de diferentes versiones, yo use la mas actual
Una vez descargado e instalado nuestro controlador, abramos nuestro administrador de SQL y abramos un nuevo query en blanco, no hay problema de que este apuntando a la base de datos "master".
Ahora escribiremos nuestra consulta para leer los datos de Postgres
SELECT a.*
FROM OPENROWSET('MSDASQL',
'Driver=PostgreSQL ANSI;uid=******;Server=192.168.1.61;port=5432;database=myDatabase;pwd=********',
'SELECT * FROM myTable LIMIT 1000')
AS a;
FROM OPENROWSET('MSDASQL',
'Driver=PostgreSQL ANSI;uid=******;Server=192.168.1.61;port=5432;database=myDatabase;pwd=********',
'SELECT * FROM myTable LIMIT 1000')
AS a;
Nota : Recuerde limitar la consulta ya que a veces hay bases de datos con millones de registros y podemos deja colgada la consulta.
Nota : Recuerde tambien que el lenguaje de SQL y TSQL tienen diferencias por ejemplo el comando TOP en TSQL no existe en Postgres por ello se usa el LIMIT
Al ejecutar esta consulta nos mostrará solo 1000 registros traidos desde Postgres
Ok ¿y ahora? ¿Cómo convierto esto en un Linked Server para poder hacer mis consultas a diestra y siniestra?
Bien, para ello nos apoyaremos del procedimiento almacenado llamado sp_AddLinkedServer que se encuentra dentro de nuestra base de datos llamada master. En base a nuestro OPENROWSET nosotros llenaremos las variables que usa nuestro sp_AddLinkedServer
Aquí les muestro como
EXEC master.dbo.sp_addlinkedserver
@server = N'POSTGRES'
,@srvproduct = N'PostgreSQL'
,@provider = N'MSDASQL'
,@provstr = N'Driver=PostgreSQL ANSI;uid=******;Server=192.168.1.61;port=5432;database=myDatabase;pwd=********'
@server = N'POSTGRES'
,@srvproduct = N'PostgreSQL'
,@provider = N'MSDASQL'
,@provstr = N'Driver=PostgreSQL ANSI;uid=******;Server=192.168.1.61;port=5432;database=myDatabase;pwd=********'
Una vez ejecutado esta consulta podras ver dentro de los Linked Server el nuevo miembro llamado POSTGRES
Para comprobar que en realidad funciona nuestro Linked Server probaremos con la siguiente consulta
SELECT a.*
FROM OPENQUERY(POSTGRES, 'SELECT * FROM myTable LIMIT 1000') As a;
FROM OPENQUERY(POSTGRES, 'SELECT * FROM myTable LIMIT 1000') As a;
El cual nos retornará un total de 1000 registros
Espero les sea de utilidad este script, saludos
Comentarios
Publicar un comentario