Подключение к базе данных PostgreSQL из Excel 2013 Power Query с помощью Npgsql
Я хочу получить данные из базы данных PostgreSQL в моей локальной сети с помощью Power Query. По умолчанию в моей версии Excel перечислены три параметра в меню "Получить внешние данные / из базы данных" на ленте Power Query - "Из базы данных SQL Server","Из базы данных Access" и "Из базы данных служб аналитики SQL Server". PostgreSQL не является вариантом по умолчанию.
К счастью (или так я думал) на официальной странице поддержки Microsoft Office есть статья о том, как установить / включить поставщик данных Ngpsql для PostgreSQL для этой цели. Я следовал этим инструкциям, но все еще вижу только эти три варианта. Я не смог найти другие инструкции о том, как сделать это через Google. Вот что я сделал точно:
- Скачать
Npgsql-2.2.5-net35.zip
отсюда, это, кажется, самый новый выпуск Npgsql для.Net 3.5. Распаковывается во временную папку. - копия
gacutil.exe
а такжеgacutil.exe.config
с другого компьютера с Visual Studio в другую временную папку на этом компьютере (находится вc:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64\
). - Бежать
gacutil.exe /i "<tempfolder>\Npgsql.dll"
и то же самое сMono.Security.dll
, Получил сообщениеAssembly successfully added to cache
на обоих. - редактировать
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
что номер версии и открытый ключ совпадают с тем, что я установил.
- Добавить строку
- Это конец инструкций на странице справки. Перезапустите 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 в нем для его работы). - Повторите № 3 с новой DLL и версией
gacutil
, Такое же сообщение об успехе. - Повторите № 4 с
machine.config
файл, на этот раз вv4.0.30319
каталог.- Также закомментировал узел, который я добавил в другой файл.
- Перезагрузка, до сих пор нет опции в меню.
На данный момент у меня нет идей. У меня это работает на нескольких других компьютерах, потому что я установил Labkey Server, который использует базу данных PostgreSQL и, по-видимому, устанавливает правильные библиотеки DLL рядом с ней. В меню это отображается просто как "Из базы данных PostgreSQL". Конечно, я мог бы просто установить Labkey Server на этот компьютер, но это кажется уродливым решением, которого я бы хотел избежать.
2 ответа
Наконец-то все заработало. Похоже, по какой-то причине вам нужна версия Microsoft Office Professional Plus для подключения PostgreSQL. С этой версией, только что установленной на новом компьютере, у меня была опция PostgreSQL под Power Query -> From Database
доступно по умолчанию. После того, как я выбрал эту опцию, дал имя хоста и базы данных, затем имя пользователя и пароль, я получил ошибку, сообщающую, что провайдер данных Ngpsql не может быть найден. Таким образом, опция, появляющаяся в меню, связана с версией MS Office, а не с тем, установлен ли поставщик Ngpsql. Я пошел на эту страницу, упомянутую выше, скачал Setup_Npgsql-2.2.5.0-r3-net40.exe
установщик, запустил, перезапустил Excel и все заработало.
У меня нет особого опыта работы с 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, чтобы это работало.