Heterogene Datenbankintegration II - PostgreSQL
Im ersten Teil wurde gezeigt, wie man von Oracle auf Fremddatenbanken wie PostgreSQL zugreifen kann. Diesmal drehen wir das Ganze um und greifen von PostgreSQL auf Oracle oder andere Datenbank-Systeme zu.
PostgreSQL hat in den letzten Jahren enormen Zuwachs erfahren. Sowohl die Anzahl der Nutzer, als auch die Größe der Unterstützer ist stetig gestiegen. Da aber eine Anwendung selten ohne Informationen von anderen Datenbanken auskommen kann, kann es sein, dass auf Daten von "Alt"-Systemen zugegriffen werden muss.
Hierfür gibt es unter PostgreSQL den "Foreign Data Wrapper", kurz fdw. Dieser kann genutzt werden, um auf viele verschiedene Arten von relationalen, aber auch objektrelationen oder NoSQL-Datenbanken zuzugreifen.
Der fdw wird als Erweiterung, also Extension, in der jeweiligen Datenbank geladen.
Vorbereitung
Für den fdw benötigen wir ein paar Pakete, die installiert werden müssen:
- Oracle Client
- Postgresql-common-Pakete
Sind die Pakete installiert, können die Quellen des oracle_fdw heruntergeladen und kompiliert werden:
$ git clone github.com/laurenz/oracle_fdw
$ cd oracle_fdw
$ make install
Ist dies alles ohne Fehler durchgelaufen, kann die Extension geladen werden:
postgres=# CREATE EXTENSION oracle_fdw;
Datenquelle einrichten
Die angelegte Extension kann nun genutzt werden, um auf die Oracle-Datenbank zuzugreifen. Dafür wird erst ein Server angelegt, in dem die Verbindungsdaten gespeichert werden, im Beispiel eine XE-Datenbank auf dem gleichen Server:
postgres=# CREATE SERVER ora_xe FOREIGN DATA WRAPPER oracle_fdw OPTIONS (dbserver '//localhost:1521/XE');
Auf diesen Server können dann Berechtigungen an bestimmte Benutzer vergeben werden:
postgres=# GRANT USAGE ON FOREIGN SERVER ora_xe TO postgres;
Dann wird festgelegt, mit welchem Schema der Oracle-Datenbank der PostgreSQL-Benutzer zugreift:
postgres=# CREATE USER MAPPING FOR postgres SERVER ora_xe OPTIONS (user 'system', password 'P4ssw0rd');
Danach kann das Fremd-Schema in die PostgreSQL-Datenbank geladen werden:
postgres=# import foreign schema „HR" from server ora_xe into hr_xe;
Dies hat den Vorteil, dass auf PostgreSQL-Seite dann bereits Informationen über die Gegenseite vorliegen und der Zugriff auf Objekte geschehen kann, ohne die Struktur kennen zu müssen.
Die Objekte können dann wie folgt angezeigt werden:
postgres=# \d
List of relations
Schema | Name | Type | Owner
--------+----------------+---------------+----------
public | xe_hr_table01 | foreign table | postgres
Ein Zugriff auf die Objekte ist jetzt ebenfalls möglich:
postgres=# select * from xe_mwe_table01;
id | description
----+-------------
1 | Wert 1
Fazit
Der Zugriff aus PosgreSQL Datenbanken auf andere Datenbanksysteme ist mit dem Foreign Data Wrappern also sehr unkompliziert. Das macht die Integration von Daten aus verschiedenen Quellen sehr einfach und komfortabel. Es gibt native Wrapper für viele gängige Systeme, aber auch generische Wrapper auf Basis von ODBC oder JDBC. Damit sollte sich praktisch jeder Anwendungsfall realisieren lassen. Eine Liste der Wrapper findet sich im Wiki.
Kommentare
Keine Kommentare