Подключение к базе данных PostgreSQL из Excel 2013 Power Query с Npgsql
Я хочу извлечь данные из базы данных PostgreSQL в свою локальную сеть с помощью Power Query. По умолчанию в моей версии Excel перечислены три варианта в меню «Получить внешние данные / из базы данных» на ленте Power Query – «Из базы данных SQL Server», «Из базы данных доступа» и «Из базы данных служб SQL Server Analysis Services». 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>
<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
что номер версии и открытый ключ соответствуют тому, что я установил.
- Добавить строку
- Это конец инструкций на странице справки. Перезапустите Excel, никаких изменений в настройках базы данных в меню. Перезагрузите компьютер, то же самое.
- Решите снова попробовать версию .Net 4.0. Загрузите новую версию Npgsql со страницы выпуска, распакуйте ее в папку temp.
- Версия
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 в нем, чтобы он работал). - Повторите # 3 с новыми dll и версией
gacutil
. Такое же сообщение успеха. - Повторите # 4 с файлом
machine.config
, на этот раз вv4.0.30319
.- Также прокомментировал узел, который я добавил в другом файле.
- Перезапустите, все еще нет опции в меню.
На данный момент у меня нет идей. У меня это работает на нескольких других компьютерах, потому что я установил 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, чтобы получить эту работу.