1

Я хочу получить данные из базы данных 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 (версия 2.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 на этот компьютер, но это кажется уродливым решением, которого я бы хотел избежать.

2 ответа2

3

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

1

У меня нет особого опыта работы с PostgreSQL, но в целом с драйверами баз данных важно начать с понимания того, имеет ли программа, с которой вы запускаете, 32-битную (иначе говоря, x86) или 64-битную (то есть 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, чтобы это работало.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .