Der ADMIN 05/13 wirft einen Blick auf die frei verfügbaren Cloud-Frameworks von Eucalyptus über OpenNebula bis OpenStack. Gute Aussichten für skalierbare ... (mehr)

Zugriff auf externe Server

Um mittels des PostgreSQL-FDW auf einen entfernten Datenbankserver zuzugreifen, muss zunächst eine entsprechende Datenquelle konfiguriert sein. Das geschieht mit Hilfe des »CREATE SERVER« -Kommandos. Im folgenden Beispiel wird auf einen entfernten PostgreSQL-Server »archives.mynet.internal« zugegriffen. Zunächst muss der FDW jedoch per »CREATE EXTENSION« in die lokale Datenbank geladen werden.

Es ist nicht notwendig, einen FDW auch auf dem entfernten Datenbankserver zu installieren, jedoch muss die lokale Datenbank per »pg_hba.conf« eine Zugriffsberechtigung auf die gewünschte Datenbank erhalten. Es können auch alle gängigen PostgreSQL-Schlüsselworte für die Datenbankverbindung angegeben werden (»host« , »dbname« , »port« und so weiter), verboten sind jedoch »user« , »password« , »failback_application_name« und »client_encoding« . Die beiden letzten werden automatisch vom FDW gesetzt:

CREATE EXTENSION postgres_fdw;

Anschließend kann die Datenquelle für den entfernten Datenbankserver definiert werden, wie das folgende Listing zeigt:

CREATE SERVER pg_archive_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS(dbname 'archive', host 'archives.mynet.internal', port '5432');

Um eine Foreign Table erzeugen zu können, muss der Datenquelle noch mitgeteilt werden, welcher Benutzer sich mit welcher Kombination aus Rollennamen und Passwort an der entfernten PostgreSQL-Instanz anmelden kann. Dafür wird ein Mapping für den Benutzer benötigt. Das erledigt das Kommandos »CREATE USER MAPPING« . Die verwendeten Zugangsinformationen unterscheiden sich zwischen den einzelnen FDW, für PostgreSQL sind auf jeden Fall Benutzername und gegebenenfalls Passwort erforderlich. Letzteres ist bei einem User Mapping für Benutzer ohne Superuserberechtigung zwingend notwendig. Das Schlüsselwort »CURRENT_USER« wird durch die aktuell in der lokalen Datenbanksitzung verwendete Rolle automatisch ersetzt:

CREATE USER MAPPING FOR CURRENT_USER
SERVER pg_archive_server
OPTIONS(user 'bernd', password 'bernd');

Mit dem Anlegen einer Datenquelle und einem Mapping für die Zugangsberechtigungen zur jeweiligen Datenquelle kann anschließend eine sogenannte Foreign Table angelegt werden. Die lokale Definition sollte dabei möglichst dem Schema der entfernten Datenquelle entsprechen. Die lokale Datenbank erhält in Listing 1 eine Foreign Table, die E-Mails in einem Archiv speichert:

Listing 1

Foreign Table

 

Beispiel: E-Mail-Archiv

Dies entspricht exakt der Definition auf dem Archivserver – dort natürlich ohne die Schlüsselwörter »SERVER« und »OPTIONS« , die dort nicht nötigt sind.

Nun kann die lokale Datenbank die Archivtabelle in lokalen Abfragen ohne Weiteres verwenden:

SELECT COUNT(*) FROM mails WHEREmail_from LIKE 'Tom Lane%';
 count
-------
  6238
(1 row)

Der FDW ist dafür zuständig, beim erstmaligem Ausführen eine für das User Mapping und Zielserver entsprechende Datenbankverbindung aufzubauen. Diese Datenbankverbindung wird pro verwendetes User Mapping innerhalb der lokalen Datenbanksitzung zur Wiederverwendung gecached.

Der PostgreSQL-FDW unterstützt nicht nur lesende, sondern auch schreibende Operationen (Data Modyfing Language, DML). Werden Transaktionen oder Sicherungspunkte (SAVEPOINT) auf der lokalen Datenbank verwendet, so koppelt der PostgreSQL-FDW diese ebenfalls an Transaktionen beziehungsweise Sicherungspunkte auf der entfernten Datenbank. Dies bedeutet, dass ein ROLLBACK von lokalen Datenbanken auch jede Änderung einer entfernten PostgreSQL-Datenquelle zurückrollt.

Ähnliche Artikel

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2022