PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Compilando a extensão mongo_fdw gravável no formato binário da instalação do PostgreSQL.

Um pequeno blog para habilitar a extensão mongo_fdw gravável no PostgreSQL 9.4. O PostgreSQL fornece um recurso poderoso chamado Foreign Data Wrappers (FDW), que permite que os DBAs se conectem a outras fontes de dados de dentro do PostgreSQL. A implementação do Foreign Data Wrapper é baseada em SQL/MED, que é suportada a partir da versão PostgreSQL 9.1 em diante, o que significa que agora podemos acessar banco de dados remoto através do PostgreSQL sem problemas. Hoje temos uma variedade de FDWs disponíveis, neste blog, estaremos compilando uma versão mais recente do FDW gravável “mongo_fdw” para acessar o MongoDB.

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].