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

Я хочу извлечь данные из базы данных PostgreSQL в свою локальную сеть с помощью Power Query. По умолчанию в моей версии Excel перечислены три варианта в меню «Получить внешние данные / из базы данных» на ленте Power Query – «Из базы данных SQL Server», «Из базы данных доступа» и «Из базы данных служб SQL Server Analysis Services». 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> <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 gacutil.exe -l | findstr Npgsql что номер версии и открытый ключ соответствуют тому, что я установил.
  5. Это конец инструкций на странице справки. Перезапустите Excel, никаких изменений в настройках базы данных в меню. Перезагрузите компьютер, то же самое.
  6. Решите снова попробовать версию .Net 4.0. Загрузите новую версию Npgsql со страницы выпуска, распакуйте ее в папку temp.
  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 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 на этом компьютере, но это похоже на уродливое решение, которое я бы хотел избежать.

    Наконец он получил эту работу. Похоже, по какой-то причине вам нужна версия Professional Plus Microsoft Office для включения соединений PostgreSQL. С этой версией, недавно установленной на новом компьютере, у меня была опция PostgreSQL в Power Query -> From Database доступная по умолчанию. Как только я выбрал эту опцию, дал имя хоста и базы данных, затем имя пользователя и пароль, я получил сообщение об ошибке, что я не смог найти поставщика данных Ngpsql. Таким образом, параметр, появляющийся в меню, просто из-за версии MS Office, а не установлен ли поставщик Ngpsql. Я перешел на эту страницу, упомянутую выше, загрузил Setup_Npgsql-2.2.5.0-r3-net40.exe , запустил, перезапустил Excel и все сработало.

    У меня нет специфического опыта работы с PostgreSQL, но в целом с драйверами базы данных крайне важно начать с понимания того, запускается ли у вас программа с 32-разрядной архитектурой (aka x86) или 64-разрядной (aka x64). Как вы можете начать видеть из путаных имен для них, Microsoft сделала общий хэш этой IMO.

    В Excel 2013 перейдите в раздел «Файл / Учетная запись / О Excel», затем просмотрите конец первой строки текста. Excel (как и все другие программы) будет работать только с драйверами одной и той же архитектуры.

    На странице документации Power Query вы ссылались на намеки на это, но она немного вводит в заблуждение, когда они говорят: «Выберите драйвер, соответствующий вашей установке Power Query» – на самом деле это ваша установка Excel, которая устанавливает архитектуру. Архитектура Power Query также полностью зависит от архитектуры Excel.

    Я загрузил файл Ngpsql 2.2.5 R3 из ссылки на странице Power Query – это не совсем понятно, но, судя по макету установки, это 32-разрядный – он предлагает установить в папку C:\Program Files (x86)\The Npgsql Development Team\Npgsql

    Если это единственный источник, то я предлагаю вам установить 32-разрядную установку Excel, чтобы получить эту работу.

    Interesting Posts
    Давайте будем гением компьютера.