使用 Npgsql 從 Excel 2013 Power Query 連線到 PostgreSQL 資料庫

使用 Npgsql 從 Excel 2013 Power Query 連線到 PostgreSQL 資料庫

我想使用 Power Query 從本地網路上的 PostgreSQL 資料庫中提取資料。預設情況下,我的Excel 版本在Power Query 功能區的「取得外部資料/從資料庫」功能表下列出了三個選項-「從SQL Server 資料庫」、「從Access 資料庫」和「從SQL Server Analysis Services 資料庫」。 PostgreSQL 不是預設選項。

幸運的是(或者我是這麼認為的)有Microsoft Office 官方支援頁面上有關如何安裝/啟用PostgreSQL 的 Ngpsql 資料提供程序以此目的。我按照這些說明進行操作,但我仍然只看到這三個選項出現。我還沒有找到任何其他關於如何透過 Google 執行此操作的說明。這就是我所做的:

  1. 下載Npgsql-2.2.5-net35.zip這裡,這似乎是 .Net 3.5 的 Npgsql 的最新版本。解壓縮到臨時資料夾。
  2. gacutil.exegacutil.exe.config從另一台裝有 Visual Studio 的電腦複製到該電腦上的另一個臨時資料夾(在 中找到c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64\)。
  3. 運行gacutil.exe /i "<tempfolder>\Npgsql.dll"並與 相同Mono.Security.dllAssembly successfully added to cache雙方都收到訊息了
  4. 編輯C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.configXML 檔案(v2.0.50727 適用於 .Net 3.5)。
    • <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"/>在節點中新增行<DbProviderFactories>。除版本號外,這是幫助頁面的逐字記錄
    • 透過執行驗證gacutil.exe -l | findstr Npgsql版本號和公鑰是否與我安裝的相匹配。
  5. 這是幫助頁面上的說明的結尾。重新啟動Excel,選單中的資料庫選項沒有變化。重啟電腦,一樣。
  6. 決定使用.Net 4.0 版本重試。從發布頁面下載新版本的 Npgsql,解壓縮到暫存資料夾。
  7. 我複製的版本gacutil.exe是.Net 3.5。在不同的目錄 ( c:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64\) 中找到了備用目錄,透過運行開關-h並得到 來驗證它是否適用於 4.0 Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.18020。複製到這台機器上(必須包含1033帶有其他一些 dll 的子目錄才能正常運作)。
  8. 使用新的 dll 和 . 版本重複#3 gacutil。同樣的成功消息。
  9. 對檔案重複 #4 machine.config,這次是在v4.0.30319目錄中。
    • 也註解掉了我在其他文件中新增的節點。
  10. 重啟,選單還是沒有選項。

此時我已經沒有主意了。我可以在其他幾台電腦上使用它,因為我已經安裝了實驗室金鑰伺服器,它使用 PostgreSQL 資料庫,並且顯然安裝了正確的 DLL。它在選單中顯示為“來自 PostgreSQL 資料庫”。當然,我可以在這台電腦上安裝 Labkey Server,但這似乎是我想避免的醜陋解決方案。

答案1

終於讓這個工作了。由於某種原因,您似乎需要 Microsoft Office Professional Plus 版本才能啟用 PostgreSQL 連線。在新電腦上新安裝這個版本後,Power Query -> From Database預設情況下 PostgreSQL 選項可用。一旦我選擇了這個選項,給了主機和資料庫名稱,然後是使用者名稱和密碼,我收到一條錯誤訊息,告訴我找不到 Ngpsql 資料提供者。因此,選單中出現的選項僅取決於 MS Office 版本,而不是是否安裝了 Ngpsql 提供者。我去了上面提到的頁面,下載Setup_Npgsql-2.2.5.0-r3-net40.exe安裝程序,運行,重新啟動 Excel,一切正常。

答案2

我對 PostgreSQL 沒有特定的經驗,但一般來說,對於資料庫驅動程序,首先要了解您所啟動的程序是具有 32 位元(又名 x86)還是 64 位元(又稱 x64)架構。正如你可以從這些混亂的名稱中看到的那樣,微軟已經對這個 IMO 進行了徹底的哈希處理。

對於 Excel 2013,請前往“檔案”/“帳戶”/“關於 Excel”,然後查看第一行文字的末尾。 Excel(與所有其他程式一樣)僅適用於相同架構的驅動程式。

您連結到的 Power Query 文件頁面對此進行了提示,但當他們說「選擇與您的 Power Query 安裝相符的驅動程式」時,這有點誤導 - 實際上是您的 Excel 安裝設定了體系結構。 Power Query 的架構​​也完全依賴 Excel 的架構。

我從 Power Query 頁面上的連結下載了 Ngpsql 2.2.5 R3 檔案 - 不太清楚,但從安裝精靈來看,這是 32 位元 - 它建議安裝到資料夾中C:\Program Files (x86)\The Npgsql Development Team\Npgsql

如果這是唯一的來源,那麼我建議您需要安裝 32 位元 Excel 才能正常運作。

相關內容