sql >> Base de Datos >  >> RDS >> PostgreSQL

Compilación de la extensión mongo_fdw con capacidad de escritura en formato binario de la instalación de PostgreSQL.

Un breve blog para habilitar la extensión mongo_fdw con capacidad de escritura en PostgreSQL 9.4. PostgreSQL proporciona una característica poderosa llamada Contenedores de datos externos (FDW), que permite a los administradores de bases de datos conectarse a otras fuentes de datos desde PostgreSQL. La implementación de Foreign Data Wrapper se basa en SQL/MED, que es compatible desde la versión PostgreSQL 9.1 en adelante, lo que significa que ahora podemos acceder a la base de datos remota a través de PostgreSQL sin problemas. Hoy tenemos una variedad de FDW disponibles, en este blog compilaremos una versión más reciente de FDW con capacidad de escritura "mongo_fdw" para acceder a MongoDB.

La última extensión mongo_fdw se basa en Mongo-c-driver y Libbson. Para implementar mongo_fdw, primero debemos compilar todas las dependencias requeridas por la extensión. A continuación se muestra la ejecución paso a paso en mi máquina CentOS 7 (64 bits) con PostgreSQL 9.4 instalado.

Paso 1. Primero instale los paquetes de dependencia requeridos por Mongo-c-Driver y Libbson.

yum install git automake autoconf libtool gcc

Paso 2. Clone el repositorio mongo_fdw de Github.

git clone https://github.com/EnterpriseDB/mongo_fdw.git

Paso 3. La compilación previa requiere pkgconfig/pkg-config (instalado en el Paso 1) y la ubicación pg_config de PostgreSQL establecida en la ruta.

[root@localhost ~]# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
[root@localhost ~]# export PATH=/opt/PostgreSQL/9.4/bin:$PATH

[root@localhost mongo_fdw]# type pg_config
pg_config is /opt/PostgreSQL/9.4/bin/pg_config

Paso 4. La compilación de Mongo_fdw se puede realizar manualmente o con la ayuda del script de compilación automática (autogen.sh) proporcionado en el paquete. Aquí, utilizaré un script de compilación automática, que descargará e instalará las bibliotecas mongo-c-driver y libbson requeridas en la ubicación predeterminada (/usr/local/lib). Para obtener más detalles sobre el script de compilación, consulte la documentación aquí.

cd mongo_fdw/
./autogen.sh --with-master
make
make install

Después de la compilación, podemos notar los archivos creados en el directorio de inicio de PostgreSQL.

-bash-4.2$ find $PWD -name "mongo*"
/opt/PostgreSQL/9.4/lib/postgresql/mongo_fdw.so
/opt/PostgreSQL/9.4/share/postgresql/extension/mongo_fdw.control
/opt/PostgreSQL/9.4/share/postgresql/extension/mongo_fdw--1.0.sql

Bien, ahora podemos crear la extensión en la base de datos.

-bash-4.2$ psql
Password:
psql.bin (9.4.4)
Type "help" for help.

postgres=# create extension mongo_fdw;
ERROR: could not load library "/opt/PostgreSQL/9.4/lib/postgresql/mongo_fdw.so": libmongoc-1.0.so.0: cannot open shared object file: No such file or directory

Vaya... parece que olvidé establecer la ruta de la biblioteca para mongo_fdw.so y MongoDB libs recién creados. Para habilitar las bibliotecas, el servidor PostgreSQL debe reiniciarse después de configurar la ruta de la biblioteca.

-bash-4.2$ export LD_LIBRARY_PATH=/opt/PostgreSQL/9.4/lib:/usr/local/lib
-bash-4.2$ /opt/PostgreSQL/9.4/bin/pg_ctl -D /opt/PostgreSQL/9.4/data/ start
server starting

Espero, esta vez no habrá ningún error..

-bash-4.2$ psql
Password:
psql.bin (9.4.4)
Type "help" for help.

postgres=# create extension mongo_fdw;
CREATE EXTENSION

postgres=# dx
List of installed extensions
Name | Version | Schema | Description
-----------+---------+------------+-----------------------------------------
adminpack | 1.0 | pg_catalog | administrative functions for PostgreSQL
mongo_fdw | 1.0 | public | foreign data wrapper for MongoDB access
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
(3 rows)

Eso es genial... tenemos la extensión mongo_fdw creada en el servidor PostgreSQL.

Para jugar con la extensión, puede consultar la documentación. [1],[2].