La dernière extension mongo_fdw est basée sur Mongo-c-driver et Libbson. Pour implémenter mongo_fdw, nous devons d'abord compiler toutes les dépendances requises par l'extension. Vous trouverez ci-dessous l'exécution étape par étape sur ma machine CentOS 7 (64 bits) avec PostgreSQL 9.4 installé.
Étape 1. Installez d'abord les packages de dépendance requis par Mongo-c-Driver et Libbson.
yum install git automake autoconf libtool gcc
Étape 2. Clonez le référentiel mongo_fdw à partir de Github.
git clone https://github.com/EnterpriseDB/mongo_fdw.git
Étape 3. La pré-compilation nécessite pkgconfig/pkg-config (installé à l'étape 1) et l'emplacement PostgreSQL pg_config défini dans le chemin.
[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
Étape 4. La compilation de Mongo_fdw peut être effectuée manuellement ou à l'aide du script de compilation automatique (autogen.sh) fourni dans le bundle. Ici, j'utiliserai un script d'auto-compilation, qui téléchargera et installera les bibliothèques mongo-c-driver et libbson requises dans l'emplacement par défaut (/usr/local/lib). Pour plus de détails sur le script de compilation, reportez-vous à la documentation ici.
cd mongo_fdw/
./autogen.sh --with-master
make
make install
Après compilation, nous pouvons remarquer les fichiers créés dans le répertoire personnel 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
Très bien, nous pouvons maintenant créer l'extension dans la base de données.
-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
Oups… il semble que j'ai oublié de définir le chemin de la bibliothèque pour les bibliothèques mongo_fdw.so et MongoDB nouvellement créées. Pour activer les bibliothèques, le serveur PostgreSQL doit être redémarré après avoir défini le chemin de la bibliothèque.
-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
J'espère que cette fois, il n'y aura pas d'erreurs..
-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)
C'est cool… nous avons créé l'extension mongo_fdw dans le serveur PostgreSQL.
Pour jouer avec l'extension, vous pouvez vous référer à la documentation. [1],[2].