
我想使用 Power Query 從本地網路上的 PostgreSQL 資料庫中提取資料。預設情況下,我的Excel 版本在Power Query 功能區的「取得外部資料/從資料庫」功能表下列出了三個選項-「從SQL Server 資料庫」、「從Access 資料庫」和「從SQL Server Analysis Services 資料庫」。 PostgreSQL 不是預設選項。
幸運的是(或者我是這麼認為的)有這Microsoft Office 官方支援頁面上有關如何安裝/啟用PostgreSQL 的 Ngpsql 資料提供程序以此目的。我按照這些說明進行操作,但我仍然只看到這三個選項出現。我還沒有找到任何其他關於如何透過 Google 執行此操作的說明。這就是我所做的:
- 下載
Npgsql-2.2.5-net35.zip
自這裡,這似乎是 .Net 3.5 的 Npgsql 的最新版本。解壓縮到臨時資料夾。 - 將
gacutil.exe
和gacutil.exe.config
從另一台裝有 Visual Studio 的電腦複製到該電腦上的另一個臨時資料夾(在 中找到c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64\
)。 - 運行
gacutil.exe /i "<tempfolder>\Npgsql.dll"
並與 相同Mono.Security.dll
。Assembly successfully added to cache
雙方都收到訊息了 - 編輯
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config
XML 檔案(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
版本號和公鑰是否與我安裝的相匹配。
- 這是幫助頁面上的說明的結尾。重新啟動Excel,選單中的資料庫選項沒有變化。重啟電腦,一樣。
- 決定使用.Net 4.0 版本重試。從發布頁面下載新版本的 Npgsql,解壓縮到暫存資料夾。
- 我複製的版本
gacutil.exe
是.Net 3.5。在不同的目錄 (c:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64\
) 中找到了備用目錄,透過運行開關-h
並得到 來驗證它是否適用於 4.0Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.18020
。複製到這台機器上(必須包含1033
帶有其他一些 dll 的子目錄才能正常運作)。 - 使用新的 dll 和 . 版本重複#3
gacutil
。同樣的成功消息。 - 對檔案重複 #4
machine.config
,這次是在v4.0.30319
目錄中。- 也註解掉了我在其他文件中新增的節點。
- 重啟,選單還是沒有選項。
此時我已經沒有主意了。我可以在其他幾台電腦上使用它,因為我已經安裝了實驗室金鑰伺服器,它使用 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 才能正常運作。