
Quiero extraer datos de una base de datos PostgreSQL en mi red local con Power Query. De forma predeterminada, mi versión de Excel enumera tres opciones en el menú "Obtener datos externos/Desde la base de datos" en la cinta de Power Query: "Desde la base de datos de SQL Server", "Desde la base de datos de Access" y "Desde la base de datos de SQL Server Analysis Services". PostgreSQL no es una opción predeterminada.
Por suerte (o eso pensé) existeesteartículo en la página de soporte oficial de Microsoft Office sobre cómo instalar/habilitar elProveedor de datos Ngpsql para PostgreSQLpara este propósito. Seguí estas instrucciones, pero todavía solo veo que aparecen esas tres opciones. No he podido encontrar otras instrucciones sobre cómo hacer esto a través de Google. Esto es lo que hice exactamente:
- Descargar
Npgsql-2.2.5-net35.zip
desdeaquí, esta parece ser la versión más reciente de Npgsql para .Net 3.5. Descomprimido en una carpeta temporal. - Copie
gacutil.exe
ygacutil.exe.config
desde otra computadora con Visual Studio a otra carpeta temporal en esta computadora (que se encuentra enc:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\x64\
). - Ejecutar
gacutil.exe /i "<tempfolder>\Npgsql.dll"
y lo mismo conMono.Security.dll
. Recibí un mensajeAssembly successfully added to cache
en ambos. - Edite
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config
el archivo XML (v2.0.50727 es para .Net 3.5).- Agregar línea
<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"/>
en el nodo<DbProviderFactories>
. Esto es palabra por palabra de la página de ayuda, excepto el número de versión. - Verificado ejecutando
gacutil.exe -l | findstr Npgsql
que el número de versión y la clave pública coinciden con lo que instalé.
- Agregar línea
- Este es el final de las instrucciones en la página de ayuda. Reinicie Excel, no hay cambios en las opciones de la base de datos en el menú. Reinicie la computadora, lo mismo.
- Decide intentarlo nuevamente con la versión .Net 4.0. Descargue la nueva versión de Npgsql desde la página de lanzamientos, descomprímala en la carpeta temporal.
- La versión que
gacutil.exe
copié era para .Net 3.5. Encontré el alternativo en un directorio diferente (c:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64\
), verifiqué que es para 4.0 ejecutando con el-h
conmutador y obtuveMicrosoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.18020
. Copiado en esta máquina (tenía que incluir el1033
subdirectorio con algunos otros archivos dll para que funcionara). - Repita el punto 3 con nuevos dll y versión de
gacutil
. Mismo mensaje de éxito. - Repita el punto 4 con
machine.config
el archivo, esta vez env4.0.30319
el directorio.- También comenté el nodo que había agregado en el otro archivo.
- Reinicie, todavía no hay ninguna opción en el menú.
En este punto ya no tengo ideas. Tengo esto funcionando en un par de computadoras más porque había instaladoServidor Labkey, que utiliza una base de datos PostgreSQL y aparentemente instala las DLL correctas junto a ella. Aparece en el menú simplemente como "Desde la base de datos PostgreSQL". Por supuesto, podría instalar Lakey Server en esta computadora, pero parece una solución fea que me gustaría evitar.
Respuesta1
Finalmente esto funcionó. Parece que por alguna razón necesitas la edición Professional Plus de Microsoft Office para habilitar las conexiones PostgreSQL. Con esta versión recién instalada en una computadora nueva, tenía la opción PostgreSQL Power Query -> From Database
disponible de forma predeterminada. Una vez que seleccioné esta opción, di el nombre del host y de la base de datos, luego el nombre de usuario y la contraseña, recibí un error que me decía que no se podía encontrar el proveedor de datos Ngpsql. Entonces, la opción que aparece en el menú se debe simplemente a la versión de MS Office y no a si el proveedor Ngpsql está instalado. fui aestepágina mencionada anteriormente, descargué el Setup_Npgsql-2.2.5.0-r3-net40.exe
instalador, ejecuté, reinicié Excel y todo funcionó.
Respuesta2
No tengo experiencia específica con PostgreSQL, pero en general con los controladores de bases de datos es fundamental comenzar por comprender si el programa que está iniciando tiene una arquitectura de 32 bits (también conocida como x86) o de 64 bits (también conocida como x64). Como puede comenzar a ver por los nombres confusos de estos, Microsoft ha hecho un picadillo total de esta OMI.
Para Excel 2013, vaya a Archivo/Cuenta/Acerca de Excel, luego mire el final de la primera línea de texto. Excel (como todos los demás programas) sólo funcionará con controladores de la misma arquitectura.
La página de documentación de Power Query que vinculó da pistas sobre esto, pero es un poco engañoso cuando dicen "Seleccione el controlador que coincida con su instalación de Power Query"; en realidad, es su instalación de Excel la que establece la arquitectura. La arquitectura de Power Query también depende totalmente de la arquitectura de Excel.
Descargué el archivo Ngpsql 2.2.5 R3 desde el enlace en la página de Power Query; no está muy claro, pero a juzgar por el asistente de instalación, es de 32 bits; sugiere instalarlo en una carpeta.C:\Program Files (x86)\The Npgsql Development Team\Npgsql
Si esa es la única fuente, le sugiero que necesite una instalación de Excel de 32 bits para que esto funcione.