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;
   


    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=********'

   
    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;

 
    El cual nos retornará un total de 1000 registros

    Espero les sea de utilidad este script, saludos

  

Comentarios

Entradas populares de este blog

SQL Server - Obtener y listar archivos de una ruta especifica

SQL Server - How to fix orphan users