Estou tentando obter dados de um SQL Server para usá-los em um banco de dados PostgreSQL. Depois de uma pergunta anterior , comecei a usar FOREIGN DATA WRAPPERS , primeiro tentei, tds_fdw
mas depois de uma instalação bem-sucedida, não consegui fazê-lo funcionar, possivelmente devido ao mesmo problema que detalho abaixo.
Depois disso, fui para o Multicorn e as coisas melhoraram um pouco, pois há documentação real para o uso dele.
Depois de tentar adicionar uma tabela do SQL Server, recebi a mensagem:
ERROR: Error in python: OperationalError DETAIL: (OperationalError)
SQL Server message 18456, severity 14, state 1, line 1: **Login failed
for user 'postgres'**. DB-Lib error message 18456, severity 14: General
SQL Server error: Check messages from the SQL Server DB-Lib error
message 20002, severity 9: Adaptive Server connection failed
Então eu entendi que é um erro de autenticação, o SQL Server funciona com a autenticação do Windows, então minha string de conexão ( mssql+pymssql://postgres:[email protected]/ForeignDatabase
) é inutilizada. Depois de mais algumas pesquisas, cheguei a esta resposta:
O plug-in check_mssql_server.py NÃO funcionará com a autenticação do Windows e requer autenticação do SQL.
Até o momento, não acredito que alguém tenha criado um plug-in MSSQL que possa usar a autenticação do Windows.
Claramente não é o mesmo cenário, mas também é uma operação de wrapper de dados que fornece uma mensagem de erro extremamente semelhante.
Portanto, minha pergunta é: é verdade que não há como usar um wrapper de dados externo do PostgreSQL para o SQL Server usando a autenticação do Windows ? Eu adicionei um novo usuário ( postgres:postgres
) ao SQL Server.
Também gostaria de acrescentar que o PostgreSQL 9.3 Server reside em um Ubuntu Server 14.04 e o SQL Server 2005 em um Windows Server 2003.
Ok, graças à orientação da comunidade consegui fazer funcionar... Acho importante mencionar algumas coisas que você deve levar em conta ao tentar fazer isso (pelo menos no mesmo ambiente que estou tentando).
Minha configuração:
Componentes adicionais:
Não vou entrar em detalhes sobre como instalar esses componentes, pois há muita documentação online.
Depois de configurar, segui o conselho de a_horse_with_no_name sobre como alterar a autenticação do SQL Server para autenticação mista e criei uma nova conta, por causa do exemplo que uso
postgres:postgres
. Adicionalmente ainda no SSMS definiSELECT
permissões para o usuáriopostgres
na tabela da qual eu queria obter os dadostblTest
.De volta ao meu PostgreSQL, criei um novo banco de dados (
pgTest
) e configurei o multicorn:CREATE EXTENSION multicorn;
Criou o servidor para nosso FOREIGN DATA WRAPPER:
E então (o que era pra ser o último passo) crie a tabela que vai pegar os dados do MS SQL Server:
Isso não mostra nenhum erro, mas uma vez que você joga um simples
SELECT * FROM pgTable;
, eu estava recebendo o erro que eu OP lá em cima.Pesquisei um pouco mais e me deparei com as postagens dos Grupos do Google rotuladas em uma resposta como um BUG .
Uma das soluções oferecidas é livrar-se do pymssql, como em:
apt-get uninstall python-pymssql; pip install pymssql
Depois disso, tentei novamente criar a tabela e obter dados, mas nada aconteceu, estava apenas obtendo uma tabela em branco.
Então eu
pip install pymssql --upgrade
, mais uma vez crio a tabela dentro do PostgreSQL e pronto! desta vez funcionou perfeito.Espero que isso ajude alguém no futuro, obrigado por sua orientação!