Connettiti al database PostgreSQL da Excel 2013 Power Query con Npgsql

Voglio tirare dati da un database PostgreSQL sulla mia networking locale con Power Query. Per impostazione predefinita, la mia versione di Excel elenca tre opzioni sotto il menu "Get External Data / From Database" del riquadro Power Query – "Dal database SQL Server", "Dal database di accesso" e "Dal database SQL Server Analysis Services". PostgreSQL non è un'opzione predefinita.

Fortunatamente (o così ho pensato) c'è questo articolo sulla pagina di supporto ufficiale di Microsoft Office su come installare / abilitare il fornitore di dati Ngpsql per PostgreSQL a questo scopo. Ho seguito queste istruzioni, ma vedo ancora queste tre opzioni. Non sono stato in grado di trovare altre istruzioni su come effettuare questa operazione tramite Google. Ecco quello che ho fatto esattamente:

  1. Scarica Npgsql-2.2.5-net35.zip da qui , questo sembra essere la versione più recente di Npgsql per .Net 3.5. Unzipped a una cartella temporanea.
  2. Copiare gacutil.exe e gacutil.exe.config da un altro computer con Visual Studio in un'altra cartella temporanea su questo computer (trovata in c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64\ ).
  3. Eseguire gacutil.exe /i "<tempfolder>\Npgsql.dll" e lo stesso con Mono.Security.dll . Il messaggio Assembly successfully added to cache su entrambi.
  4. Modifica C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config file XML (v2.0.50727 è per .Net 3.5).
    • Aggiungi linea <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"/> nel nodo <DbProviderFactories> . Questo è verbatim dalla pagina di aiuto tranne il numero di versione
    • Verificato eseguendo gacutil.exe -l | findstr Npgsql gacutil.exe -l | findstr Npgsql che il numero di versione e la chiave pubblica corrispondono a quello che ho installato.
  5. Questa è la fine delle istruzioni nella pagina di aiuto. Riavviare Excel, nessuna modifica delle opzioni del database nel menu. Riavviare il computer stesso.
  6. Decidere di riprovare con la versione .Net 4.0. Scaricare la nuova versione di Npgsql dalla pagina delle versioni, estrarre dalla cartella unzip alla cartella temporanea.
  7. La versione di gacutil.exe ho copiato era per .Net 3.5. Trovato l'alternativo in una directory diversa ( c:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64\ ), verificato che sia per 4.0 eseguendo con l' -h e ha Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.18020 Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.18020 . Copiato su questa macchina (whereva includere la sottodirectory 1033 con altri dll in esso per funzionare).
  8. Ripeti # 3 con nuovi dll e la versione di gacutil . Stesso messaggio di successo.
  9. Ripetere # 4 con il file machine.config , questa volta nella directory v4.0.30319 .
    • Ha anche commentato il nodo che avevo aggiunto nell'altro file.
  10. Riavviare, ancora nessuna opzione nel menu.

A questo punto sono fuori dalle idee. Ho questo lavoro su un paio di altri computer perché avevo installato Labkey Server , che utilizza un database PostgreSQL e apparentemente installa la DLL corretta accanto a essa. Si presenta nel menu come semplicemente "Dal database PostgreSQL". Naturalmente potrei installare Labkey Server su questo computer, ma questo sembra una brutta soluzione che vorrei evitare.

Finalmente abbiamo lavorato. Sembra che per qualche motivo è necessaria l'edizione Professional Plus di Microsoft Office per abilitare le connessioni PostgreSQL. Con questa versione appena installata su un nuovo computer avevo l'opzione PostgreSQL in Power Query -> From Database disponibile per impostazione predefinita. Una volta selezionata questa opzione, ho dato il nome dell'host e del database, quindi il nome utente e la password, ho trovato un errore che mi ha detto che il fornitore di dati Ngpsql non è stato trovato. Quindi, l'opzione visualizzata nel menu è semplicemente dovuta alla versione MS Office e non se il provider Ngpsql è installato. Sono andato a questa pagina di cui sopra, scaricato il Setup_Npgsql-2.2.5.0-r3-net40.exe , eseguito, riavviato Excel e tutto funzionava.

Non ho alcuna esperienza specifica con PostgreSQL, ma in generale con i driver di database, è fondamentale partire da una comprensione del fatto che il programma in cui si parte da un architettura a 32 bit (aka x86) oa 64 bit (aka x64). Come potete iniziare a vedere dai nomi confusi per questi, Microsoft ha fatto un hash totale di questo IMO.

Per Excel 2013, vai su File / Account / Su Excel, quindi guarda la fine della prima row di text. Excel (come tutti gli altri programmi) funziona solo con i driver della stessa architettura.

La pagina di documentazione Power Query collegata a suggerimenti a questo proposito, ma è un po 'fuorviante quando dicono "Seleziona il driver che corrisponde all'installazione di Power Query" – in realtà è l'installazione di Excel che imposta l'architettura. L'architettura per Power Query è anche totalmente dipendente dall'architettura di Excel.

Ho scaricato il file Ngpsql 2.2.5 R3 dal collegamento nella pagina Power Query – non è molto chiaro, ma a giudicare dalla procedura guidata di installazione 32 bit – suggerisce di installare nella cartella C:\Program Files (x86)\The Npgsql Development Team\Npgsql

Se questa è l'unica fonte, ti suggerisco di disporre di un'installazione di 32 bit di Excel per get questo funzionamento.