L'ultima estensione mongo_fdw è basata su Mongo-c-driver e Libbson. Per implementare mongo_fdw, dobbiamo prima compilare tutte le dipendenze richieste dall'estensione. Di seguito è riportata l'esecuzione passo passo sulla mia macchina CentOS 7 (64 bit) con PostgreSQL 9.4 installato.
Passaggio 1. Installa prima i pacchetti di dipendenze richiesti da Mongo-c-Driver e Libbson.
yum install git automake autoconf libtool gcc
Passaggio 2. Clona il repository mongo_fdw da Github.
git clone https://github.com/EnterpriseDB/mongo_fdw.git
Passaggio 3. La pre-compilazione richiede pkgconfig/pkg-config (installato nel passaggio 1) e la posizione pg_config PostgreSQL impostata nel percorso.
[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
Passaggio 4. La compilazione di Mongo_fdw può essere eseguita manualmente o con l'aiuto dello script di compilazione automatica (autogen.sh) fornito nel bundle. Qui utilizzerò lo script di compilazione automatica, che scaricherà e installerà le librerie mongo-c-driver e libbson richieste nella posizione predefinita (/usr/local/lib). Per maggiori dettagli sullo script di compilazione fare riferimento alla documentazione qui.
cd mongo_fdw/
./autogen.sh --with-master
make
make install
Dopo la compilazione, possiamo notare i file creati nella home directory di 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
Bene, ora possiamo creare l'estensione nel database.
-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
Oops... sembra che mi sia dimenticato di impostare il percorso della libreria per le librerie mongo_fdw.so e MongoDB appena create. Per abilitare le librerie, il server PostgreSQL deve essere riavviato dopo aver impostato il percorso della libreria.
-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
Spero, questa volta non ci saranno errori..
-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)
È fantastico ... abbiamo l'estensione mongo_fdw creata nel server PostgreSQL.
Per giocare con l'estensione, puoi fare riferimento alla documentazione. [1],[2].