Die neueste mongo_fdw-Erweiterung basiert auf Mongo-c-driver und Libbson. Um mongo_fdw zu implementieren, müssen wir zuerst alle Abhängigkeiten kompilieren, die von der Erweiterung benötigt werden. Unten sehen Sie die schrittweise Ausführung auf meinem CentOS 7 (64-Bit)-Rechner mit installiertem PostgreSQL 9.4.
Schritt 1. Installieren Sie zuerst die von Mongo-c-Driver und Libbson benötigten Abhängigkeitspakete.
yum install git automake autoconf libtool gcc
Schritt 2. Klonen Sie das mongo_fdw-Repository von Github.
git clone https://github.com/EnterpriseDB/mongo_fdw.git
Schritt 3. Für die Vorkompilierung sind pkgconfig/pkg-config (in Schritt 1 installiert) und der im Pfad festgelegte PostgreSQL-Speicherort pg_config erforderlich.
[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
Schritt 4. Die Mongo_fdw-Kompilierung kann manuell oder mit Hilfe des Auto-Kompilierungs-Skripts (autogen.sh) erfolgen, das im Paket enthalten ist. Hier werde ich ein Autokompilierungsskript verwenden, das die erforderlichen Mongo-C-Treiber- und Libbson-Bibliotheken am Standardspeicherort (/usr/local/lib) herunterlädt und installiert. Weitere Einzelheiten zum Kompilierungsskript finden Sie in der Dokumentation hier.
cd mongo_fdw/
./autogen.sh --with-master
make
make install
Nach der Kompilierung können wir die Dateien sehen, die im PostgreSQL-Home-Verzeichnis erstellt wurden.
-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
Gut, jetzt können wir die Erweiterung in der Datenbank erstellen.
-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
Ups … anscheinend habe ich vergessen, den Bibliothekspfad für neu erstellte mongo_fdw.so- und MongoDB-Bibliotheken festzulegen. Um Bibliotheken zu aktivieren, sollte der PostgreSQL-Server nach dem Festlegen des Bibliothekspfads neu gestartet werden.
-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
Hoffe, diesmal gibt es keine Fehler..
-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)
Das ist cool … wir haben die Erweiterung mongo_fdw auf dem PostgreSQL-Server erstellt.
Um mit der Erweiterung zu spielen, können Sie auf die Dokumentation verweisen. [1],[2].