Подключение к базе данных PostgreSQL из Excel 2013 Power Query с помощью Npgsql

9086
JaredL

Я хочу получить данные из базы данных PostgreSQL в моей локальной сети с помощью Power Query. По умолчанию в моей версии Excel перечислены три параметра в меню «Получить внешние данные / из базы данных» на ленте Power Query - «Из базы данных SQL Server», «Из базы данных Access» и «Из базы данных служб аналитики SQL Server». PostgreSQL не является вариантом по умолчанию.

К счастью (или так мне казалось) есть эта статья на официальной странице поддержки Microsoft Office о том, как установить / включить поставщик данных Ngpsql для PostgreSQL для этой цели. Я следовал этим инструкциям, но все еще вижу только эти три варианта. Я не смог найти другие инструкции о том, как сделать это через Google. Вот что я сделал точно:

  1. Скачать Npgsql-2.2.5-net35.zipс здесь, это, кажется, новейший выпуск Npgsql для .Net 3.5. Распаковывается во временную папку.
  2. Скопируйте gacutil.exeи gacutil.exe.configс другого компьютера с Visual Studio в другую временную папку на этом компьютере (находится в c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64\).
  3. Беги gacutil.exe /i "<tempfolder>\Npgsql.dll"и так же с Mono.Security.dll. Получил сообщение Assembly successfully added to cacheна обоих.
  4. Отредактируйте 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что номер версии и открытый ключ совпадают с тем, что я установил.
  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\), проверил, что это для 4.0, запустив с -hкоммутатором, и получил Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.18020. Скопировал на эту машину (должен был включить 1033подкаталог с некоторыми другими DLL в нем, чтобы он работал).
  8. Повторите № 3 с новой DLL и версией gacutil. Такое же сообщение об успехе.
  9. Повторите # 4 с machine.configфайлом, на этот раз в v4.0.30319каталоге.
    • Также закомментировал узел, который я добавил в другой файл.
  10. Перезагрузка, до сих пор нет опции в меню.

На данный момент у меня нет идей. У меня это работает на нескольких других компьютерах, потому что я установил Labkey Server, который использует базу данных PostgreSQL и, по-видимому, устанавливает правильные библиотеки DLL рядом с ней. В меню это отображается просто как «Из базы данных PostgreSQL». Конечно, я мог бы просто установить Labkey Server на этот компьютер, но это кажется уродливым решением, которого я бы хотел избежать.

1
Какую версию Power Query вы используете? Найдите кнопку «О программе» на ленте PQ. Mike Honey 8 лет назад 0
Номер версии: «2.24.4064.242». Я думал, что только что обновил это. JaredL 8 лет назад 0

2 ответа на вопрос

3
JaredL

Finally got this working. It looks like for some reason you need the Professional Plus edition of Microsoft Office to enable PostgreSQL connections. With this version freshly installed on a new computer I had the PostgreSQL option under Power Query -> From Database available by default. Once I selected this option, gave the host and database name, then username and password, I got an error telling me I the Ngpsql data provider could not be found. So, the option appearing in the menu is simply due to MS Office version and not whether the Ngpsql provider is installed. I went to this page mentioned above, downloaded the Setup_Npgsql-2.2.5.0-r3-net40.exe installer, ran, restarted Excel and everything worked.

1
Mike Honey

I've no specific experience with PostgreSQL, but in general with database drivers it's critical to start from an understanding of whether the program you are starting from has a 32-bit (aka x86) or 64-bit (aka x64) architecture. As you can start to see from the muddled names for these, Microsoft have made a total hash of this IMO.

For Excel 2013, go to File / Account / About Excel, then look at the end of the first line of text. Excel (like all other programs) will only work with drivers of the same architecture.

The Power Query documentation page you linked to hints at this, but it is a bit misleading when they say "Select the driver that matches your Power Query installation" - really it's your Excel installation that sets the architecture. The architecture for Power Query is also totally dependent on the architecture for Excel.

I downloaded the Ngpsql 2.2.5 R3 file from the link on the Power Query page - it's not really clear but judging from the install wizard this is 32-bit - it suggests installing into folder C:\Program Files (x86)\The Npgsql Development Team\Npgsql

If that is the only source, then I suggest you need a 32-bit Excel install to get this working.

Номер моей версии: `15.0.4737.1000`, 64-битный. Я попытался снова запустить установщик (R3) со страницы релиза, и он не работал. Я не смог найти упоминания об архитектуре на странице, но вы правы, он устанавливается в `Program Files (x86) ', поэтому он, вероятно, 32-битный. Думаю, я просто попробую установить Labkey Server. JaredL 8 лет назад 0
Я пытался использовать Office 64-bit на нескольких разных машинах, чтобы получить выгоду от повышения производительности. В любом случае мне приходилось сдаваться из-за схожих проблем с драйверами или надстройками, удалять Office и переустанавливать его как 32-разрядный. Это немного грустно, но я больше не пытаюсь использовать 64-битную версию ... Mike Honey 8 лет назад 0