
Quero extrair dados de um banco de dados PostgreSQL na minha rede local com o Power Query. Por padrão, minha versão do Excel lista três opções no menu "Obter dados externos/do banco de dados" na faixa do Power Query - "Do banco de dados SQL Server", "Do banco de dados Access" e "Do banco de dados SQL Server Analysis Services". PostgreSQL não é uma opção padrão.
Felizmente (ou assim pensei) existeesseartigo na página oficial de suporte do Microsoft Office sobre como instalar/habilitar oProvedor de dados Ngpsql para PostgreSQLpara este propósito. Segui essas instruções, mas ainda vejo apenas essas três opções aparecendo. Não consegui encontrar outras instruções sobre como fazer isso no Google. Aqui está o que eu fiz exatamente:
- Baixar
Npgsql-2.2.5-net35.zip
deaqui, esta parece ser a versão mais recente do Npgsql para .Net 3.5. Descompactado em uma pasta temporária. - Copie
gacutil.exe
egacutil.exe.config
de outro computador com Visual Studio para outra pasta temporária neste computador (encontrada emc:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64\
). - Execute
gacutil.exe /i "<tempfolder>\Npgsql.dll"
e faça o mesmo comMono.Security.dll
. Recebi mensagemAssembly successfully added to cache
em ambos. - Edite
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config
o arquivo XML (v2.0.50727 é para .Net 3.5).- Adicione linha
<add description=".Net Framework Data Provider for Postgresql Server" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.2.5.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" name="Npgsql Data Provider" invariant="Npgsql" support="FF"/>
no nó<DbProviderFactories>
. Isto é literalmente da página de ajuda, exceto pelo número da versão - Verificado executando
gacutil.exe -l | findstr Npgsql
se o número da versão e a chave pública correspondem ao que instalei.
- Adicione linha
- Este é o fim das instruções na página de ajuda. Reinicie o Excel, sem alteração nas opções do banco de dados no menu. Reinicie o computador, mesmo.
- Decida tentar novamente com a versão .Net 4.0. Baixe a nova versão do Npgsql na página de lançamentos, descompacte na pasta temporária.
- A versão que
gacutil.exe
copiei era para .Net 3.5. Encontrei o alternativo em um diretório diferente (c:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64\
), verifiquei que é para 4.0 executando com o-h
switch e obtiveMicrosoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.18020
. Copiado para esta máquina (tive que incluir o1033
subdiretório com algumas outras DLLs para que funcionasse). - Repita o item 3 com novas DLLs e versões do
gacutil
. Mesma mensagem de sucesso. - Repita o item 4 com
machine.config
o arquivo, desta vez nov4.0.30319
diretório.- Também comentei o nó que adicionei no outro arquivo.
- Reinicie, ainda sem opção no menu.
Neste ponto estou sem ideias. Eu tenho isso funcionando em alguns outros computadores porque eu tinha instaladoServidor Labkey, que usa um banco de dados PostgreSQL e aparentemente instala as DLLs corretas junto com ele. Ele aparece no menu simplesmente como "Do banco de dados PostgreSQL". É claro que eu poderia simplesmente instalar o Labkey Server neste computador, mas parece uma solução feia que gostaria de evitar.
Responder1
Finalmente consegui fazer isso funcionar. Parece que, por algum motivo, você precisa da edição Professional Plus do Microsoft Office para habilitar conexões PostgreSQL. Com esta versão recém-instalada em um novo computador, eu tinha a opção PostgreSQL Power Query -> From Database
disponível por padrão. Depois de selecionar esta opção, fornecer o nome do host e do banco de dados, depois o nome de usuário e a senha, recebi um erro informando que o provedor de dados Ngpsql não foi encontrado. Portanto, a opção que aparece no menu se deve simplesmente à versão do MS Office e não ao fato do provedor Ngpsql estar instalado. eu fui paraessepágina mencionada acima, baixei o Setup_Npgsql-2.2.5.0-r3-net40.exe
instalador, executei, reiniciei o Excel e tudo funcionou.
Responder2
Não tenho experiência específica com PostgreSQL, mas em geral com drivers de banco de dados é fundamental começar entendendo se o programa que você está iniciando tem uma arquitetura de 32 bits (também conhecida como x86) ou de 64 bits (também conhecida como x64). Como você pode começar a ver pelos nomes confusos deles, a Microsoft fez uma confusão total com esse IMO.
Para Excel 2013, vá em Arquivo/Conta/Sobre o Excel e observe o final da primeira linha do texto. O Excel (como todos os outros programas) só funcionará com drivers da mesma arquitetura.
A página de documentação do Power Query que você vinculou sugere isso, mas é um pouco enganador quando eles dizem "Selecione o driver que corresponde à instalação do Power Query" - na verdade, é a instalação do Excel que define a arquitetura. A arquitetura do Power Query também é totalmente dependente da arquitetura do Excel.
Baixei o arquivo Ngpsql 2.2.5 R3 do link na página do Power Query - não está muito claro, mas a julgar pelo assistente de instalação, é de 32 bits - sugere a instalação na pastaC:\Program Files (x86)\The Npgsql Development Team\Npgsql
Se essa for a única fonte, sugiro que você precise de uma instalação do Excel de 32 bits para que isso funcione.