
Я хочу извлечь данные из базы данных PostgreSQL в моей локальной сети с помощью Power Query. По умолчанию моя версия Excel предлагает три варианта в меню «Получить внешние данные/из базы данных» на ленте Power Query: «Из базы данных SQL Server», «Из базы данных Access» и «Из базы данных 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>
. Это дословно со страницы справки, за исключением номера версии - Проверил, запустив
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, который использует базу данных PostgreSQL и, по-видимому, устанавливает нужные DLL вместе с ней. Он отображается в меню просто как "Из базы данных PostgreSQL". Конечно, я мог бы просто установить Labkey Server на этом компьютере, но это кажется мне уродливым решением, которого я хотел бы избежать.
решение1
Наконец-то это заработало. Похоже, по какой-то причине вам нужна версия Professional Plus Microsoft Office для включения подключений PostgreSQL. С этой версией, недавно установленной на новом компьютере, у меня была опция PostgreSQL в списке Power Query -> From Database
доступных по умолчанию. После того, как я выбрал эту опцию, указал имя хоста и базы данных, затем имя пользователя и пароль, я получил сообщение об ошибке, сообщающее, что поставщик данных Ngpsql не может быть найден. Таким образом, опция, появляющаяся в меню, просто связана с версией MS Office, а не с тем, установлен ли поставщик Ngpsql. Я перешел наэтотстраницу, указанную выше, скачал Setup_Npgsql-2.2.5.0-r3-net40.exe
установщик, запустил, перезапустил Excel и все заработало.
решение2
У меня нет особого опыта работы с PostgreSQL, но в целом с драйверами баз данных важно начать с понимания того, имеет ли программа, с которой вы начинаете, 32-битную (т.е. x86) или 64-битную (т.е. x64) архитектуру. Как вы можете видеть из запутанных названий, Microsoft устроила полную кашу из этого, по моему скромному мнению.
Для 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, чтобы все заработало.