
Power Query を使用して、ローカル ネットワーク上の PostgreSQL データベースからデータを取得したいと考えています。既定では、私のバージョンの Excel では、Power Query リボンの [外部データの取得/データベースから] メニューの下に、[SQL Server データベースから]、[Access データベースから]、[SQL Server Analysis Services データベースから] の 3 つのオプションがリストされています。PostgreSQL は既定のオプションではありません。
幸運なことに(少なくとも私はそう思っていた)これ公式Microsoft Officeサポートページの記事でインストール/有効化の方法が説明されています。PostgreSQL 用 Ngpsql データ プロバイダーこの目的のために。私はこれらの指示に従いましたが、それでも 3 つのオプションしか表示されません。Google でこれを行う方法に関する他の指示を見つけることができませんでした。私が正確に行ったことは次のとおりです。
- ダウンロード
Npgsql-2.2.5-net35.zip
はこちらこここれは、Npgsql for .Net 3.5 の最新リリースのようです。一時フォルダーに解凍されました。 - Visual Studio がインストールされている別のコンピューターから と をこのコンピューター上の別の一時フォルダー ( にあります
gacutil.exe
)にコピーします。gacutil.exe.config
c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64\
- 実行して
gacutil.exe /i "<tempfolder>\Npgsql.dll"
同じ結果になりますMono.Security.dll
。Assembly successfully added to cache
両方でメッセージを受け取りました。 - XML ファイルを編集します
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config
(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\
) で代替バージョンを見つけ、スイッチを付けて実行して 4.0 用であることを確認し-h
、 を取得しましたMicrosoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.18020
。このマシンにコピーしました (1033
動作させるには、他の dll を含むサブディレクトリを含める必要がありました)。 - 新しい dll とバージョンで #3 を繰り返します
gacutil
。同じ成功メッセージが表示されます。 machine.config
今回はディレクトリ内のファイルで #4 を繰り返しますv4.0.30319
。- 他のファイルに追加したノードもコメントアウトしました。
- 再起動しても、メニューにオプションが表示されません。
この時点ではアイデアが尽きています。私はこれを他のコンピュータで動作させています。Labkey サーバーは、PostgreSQL データベースを使用し、適切な DLL を一緒にインストールするようです。メニューには単に「PostgreSQL データベースから」と表示されます。もちろん、このコンピューターに Labkey Server をインストールすることもできますが、それは避けたい醜い解決策のようです。
答え1
ようやく動作するようになりました。どうやら、何らかの理由で、PostgreSQL 接続を有効にするには Microsoft Office の Professional Plus エディションが必要なようです。このバージョンを新しいコンピュータに新しくインストールすると、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) アーキテクチャかを理解することから始めることが重要です。これらの混乱した名前からわかるように、Microsoft はこの点を完全に台無しにしてしまったと私は思います。
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 のインストールが必要であると提案します。