A extensão mais recente do mongo_fdw é baseada no Mongo-c-driver e no Libbson. Para implementar o mongo_fdw, primeiro precisamos compilar todas as dependências exigidas pela extensão. Abaixo está o passo a passo de execução na minha máquina CentOS 7 (64 bits) com PostgreSQL 9.4 instalado.
Etapa 1. Primeiro instale os pacotes de dependência exigidos pelo Mongo-c-Driver e Libbson.
yum install git automake autoconf libtool gcc
Etapa 2. Clone o repositório mongo_fdw do Github.
git clone https://github.com/EnterpriseDB/mongo_fdw.git
Etapa 3. A pré-compilação requer pkgconfig/pkg-config (instalado na Etapa 1) e o local pg_config do PostgreSQL definido no caminho.
[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
Etapa 4. A compilação do Mongo_fdw pode ser feita manualmente ou com a ajuda do script de compilação automática (autogen.sh) fornecido no pacote. Aqui, usarei o script de compilação automática, que baixará e instalará as bibliotecas mongo-c-driver e libbson necessárias no local padrão (/usr/local/lib). Para obter mais detalhes sobre o script de compilação, consulte a documentação aqui.
cd mongo_fdw/
./autogen.sh --with-master
make
make install
Após a compilação, podemos observar os arquivos criados no diretório home do 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
Pronto, agora podemos criar a extensão no banco de dados.
-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
Ops… parece que esqueci de definir o caminho da biblioteca para as bibliotecas mongo_fdw.so e MongoDB recém-criadas. Para habilitar as bibliotecas, o servidor PostgreSQL deve ser reiniciado após definir o caminho da 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 que desta vez não haja erros ..
-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)
Isso é legal… temos a extensão mongo_fdw criada no servidor PostgreSQL.
Para brincar com a extensão, você pode consultar a documentação. [1],[2].