Wenn man mit zwei Datenbanken parallel arbeiten möchte, stellt sich immer die Frage, wie geht das am Besten?Wir wollen hier mal die REST Schnittstelle als Verbindung zwischen Oracle und Postgres verwenden.Wir verwenden hier PostgRESThttps://postgrest.org/en/v7.0.0/Installationsverzeichnis aussuchen:
Software herunterladen:
Auspacken:
REM Rest Service Dienst starten
Schema und Beispieltabelle anlegen:
Rolle anlegen
Nur Leserechte auf Schema
Anmelde Benutzer anlegen:
vi tutorial.conf
Passwort eintragen:
Mit Ihrem Passwort gehen Sie bitte in die Webseite und führen folgende Schritte aus
Verwenden Sie ein zweite Session:Lesetest:
Schreibtest:
Beispiele für Lesefilter:
Eine Zeile anzeigen
Weitere Beispiele: https://postgrest.org/en/v7.0.0/api.htmlInsert neue Zeile
Update (auf alle Zeilen)
Update (auf eine Zeile (alle Spalten müssen angegeben werden!))
Delete (eine Zeile)
Sehen wir uns mal die Seite von Oracle aus an. Wie kann man die Postgres Schnittstelle ansprechen?Dafür bietet sich das Package apex_web_service an, das installiert ist, wenn Sie auch APEX/ORDS installiert haben.Wir schreiben uns ein kleines Package, das die Daten im JSON Format an die Postgres REST Schnittstelle übergibt:
und der dazugehörige Body. Bitte beachten Sie, dass der Bearer Schlüssel in Zeile 11 angepasst werden muss. Diese haben Sie im Schritt auf der Seite https://jwt.io/#debugger-io(siehe oben) bekommen.Wenn der Schlüssel nicht passt, bekommen Sie eine Fehlermeldung, dass Sie keine Rechte auf der Tabelle haben.Passen Sie auch bitte die IP Adresse vom Ziel Server an (bei uns 172.30.30.8)
Als Bonus-Track schreiben wir uns einen Trigger, der das obige Oracle Package nutzt und alle Änderungen auf Oracle Seite in der Tabelle in eine gleiche Tabelle auf Postgres synchon spiegelt.Hinweis die Tabelle (mit Primary Key) muss in Postgres jedoch angelegt werden:
Beispiele zum Packageaufruf:
Beispiele zum Trigger-Testen:
Nun kann man Oracle und Postgres wunderbar miteinander verbinden. Weitere Tipps & Tricks erfahren Sie u.a. in unserm Oracle ORDS Kurs.