Arquivo da tag: PostgreSQL

Linked Server: consultando o PostGreSQL através do MS SQL Server

Antes de tudo é necessário instalar os drivers ODBC do PostGreSQL no servidor em que se encontra o MS SQL Server.

Depois registre um System DSN, ou Fonte de Dados do Sistema. Para isto basta se encaminhar para:

Painel de Controle → Ferramentas Administrativas → Fontes de Dados ODBC.

Basta preencher as caixinhas e depois testar. Com a conexão funcionando,  agora é hora de se criar um Linked Server entre o MS SQL Server e o PostGreSQL.

EXEC master.dbo.sp_droplinkedsrvlogin
          @rmtsrvname=N'LINKEDSERVERNAME'
	, @locallogin=NULL

EXEC master.dbo.sp_dropserver
	  @server = 'LINKEDSERVERNAME'

EXEC master.dbo.sp_addlinkedserver
	  @server = 'LINKEDSERVERNAME'
	, @provider = 'Postgresql OLE DB'
	, @datasrc = 'Postgresql ANSI'

EXEC master.dbo.sp_addlinkedsrvlogin
	  @rmtsrvname=N'LINKEDSERVERNAME'
	, @useself=N'False'
	, @locallogin=NULL
	, @rmtuser='usuariopostgres'
	, @rmtpassword='senhapostgres'

Agora você pode fazer consultas assim:

SELECT * FROM openquery(LINKEDSERVERNAME, 'SELECT * FROM TABELADOPOSTGRES')

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 remote_query.sql está com problemas, tente este no lugar: remote_query2.sql);
  • teste!!

SELECT * FROM remote_select(
‘dbi:ODBC:DRIVER=SQL Server;UID=nom_usuario;PWD=senha_usuario;WSID=nom_maquina;DATABASE=nome_BD;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 remote_select(
‘dbi:ODBC:DRIVER=SQL Server;UID=nom_usuario;PWD=senha_usuario;WSID=nom_maquina;DATABASE=nome_BD;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.