Acessando o MS SQL Server através do PostGreSQL

Para acessar o MS SQL Server através de aplicativos que não possuam os meios oficiais de acesso (protocolo TDS) devemos utilziar ou o FreeTDS ou uma conexão ODBC (Open Database Communication).
Segue como utilizar uma conexão ODBC através do módulo DBI do Perl:

Configurando o PostGreSQl para acessar fontes externas de dados:

  • instale o Perl (padrão para usuários Unix/Linux, ActivePerl no caso de usuários Windows);
  • instale os módulos DBI e DBD-ODBC do Perl via ppm (ou “Perl Package Manager”);
  • adicione a linguagem plperlu à lista de linguagens de seu banco de dados (utilize o PgAdmin ou vá por linha de comando: psql)
  • instale o módulo dbi-link no PostGreSQL, basta rodar os scripts (note que o script do arquivo remotequery.sql está com problemas, tente este no lugar: remotequery2.sql);
  • teste!!

SELECT * FROM remoteselect(
‘dbi:ODBC:DRIVER=SQL Server;UID=nom
usuario;PWD=senhausuario;WSID=nommaquina;DATABASE=nomeBD;APP=Microsoft Data Access Components;SERVER=(local);Description=Sql Server ODBC’
, ‘nom
usuario’
, ‘senha_usuario’
, ‘{AutoCommit => 1, RaiseError => 1}’
, ‘SELECT * FROM tabela’)
AS(id int4, coluna varchar, outracoluna varchar)
A consulta acima resulta numa tabela com três colunas: id, coluna e outracoluna.
Talvez seja preciso mudar o primeiro parâmetro da chamada da função, que é onde se encontra o DSN (“Data Source Name”) do ODBC. Tente criar pelo próprio Windows (estou numa estação com Windows 2003), indo na seção de configuração de Fontes de Dados ODBC, na aba Fonte de dados de arquivos (que eu acho que deveria ter sido traduzido como “arquivo de fonte de dados”, mas enfim…). Siga o “wizard” apresentado e depois abra o arquivo .dsn num editor de texto para obter a string de conexão.

Note que é preciso que os nomes das tabelas no SQL Server estejam todos em minúsculo. Se este não for o caso, tente utilizar aspas duplas nos nomes das colunas:

SELECT * FROM remoteselect(
‘dbi:ODBC:DRIVER=SQL Server;UID=nom
usuario;PWD=senhausuario;WSID=nommaquina;DATABASE=nomeBD;APP=Microsoft Data Access Components;SERVER=(local);Description=Sql Server ODBC’
, ‘nom
usuario’
, ‘senha_usuario’
, ‘{AutoCommit => 1, RaiseError => 1}’
, ‘SELECT * FROM tabela’)
AS(“Id” int4, “coluna” varchar, “outraColuna” varchar)
E é isso.