使用 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.exe使用 Visual Studio 将和从另一台计算机复制gacutil.exe.config到此计算机上的另一个临时文件夹(位于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 连接。在新计算机上新安装此版本后,我默认可以使用 PostgreSQL 选项Power Query -> From Database。选择此选项后,输入主机和数据库名称,然后输入用户名和密码,我收到一条错误消息,告诉我找不到 Ngpsql 数据提供程序。因此,菜单中出现的选项只是由于 MS Office 版本,而不是是否安装了 Ngpsql 提供程序。我去了上面提到的页面,下载Setup_Npgsql-2.2.5.0-r3-net40.exe安装程序,运行,重新启动 Excel,一切正常。

答案2

我没有使用过 PostgreSQL,但一般来说,对于数据库驱动程序,首先要了解你使用的程序是 32 位(又名 x86)还是 64 位(又名 x64)架构。从这些混乱的名称可以看出,在我看来,微软把这搞得一团糟。

对于 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 才能使其正常工作。

相关内容