SSIS: Zugriff auf PostgreSQL-Server
avatar

Das Problem

Bei einem Kunden wurde ich vor kurzem vor die Aufgabe gestellt, Daten von einem Fremdsystem auf Basis eines PostgreSQL-Servers in eine bestehende SQL-Server-Datenbank zu importieren.

SSIS bietet aber standardmäßig keinen direkten Zugriff auf PostgreSQL-Server, sodass ein wenig Recherche nötig war.

Die Lösung

Für den Zugriff auf den PostgreSQL-Server wird ein spezieller ODBC-Treiber benötigt, der von der PostgreSQL-Community unter [1] bereitgestellt wird.

Das MSI-Paket muss zunächst installiert werden. Bei der Installation können alle Standardeinstellungen durch Klick auf „weiter“ übernommen werden. Nach Abschluss der Installation muss eine ODBC-Datenquelle im 32-Bit (!) Modus erstellt werden:

  • hierzu muss der „ODBC-Datensource-Administrator“ im 32-Bit-Modus aufrufen werden, mit dem Befehl: %windir%\SysWOW64\odbcad32.exe
  • dann wird unter „User DSN“ eine neue User-Datasource hinzugefügt
  • im sich öffnenden Fenster wird in diesem Fall der Treiber „PostgreSQL Unicode“ ausgewählt (je nachdem ob die Datenbank eine Unicode-Codierung besitzt)
  • im nächsten Fenster müssen die Zugangsdaten der Datenbank eingetragen werden:
    ssis_postgres_1
  • wenn die Datenquelle erfolgreich getestet wurde, kann sie gespeichert werden
  • der DataSource-Name sollte für dieses Beispiel so eingehalten werden, da das SSIS-Paket später darauf verweist.
  • Im SSIS-Paket muss zunächst ein neuer Connection-Manager angelegt werden: hier muss nach einem Rechtsklick auf in der Unterfenster „Connection Manager“ „New Connection“ ausgewählt werden:
    ssis_postgres_2
  • Anschließend wird „ODBC“ ausgewählt:
    ssis_postgres_3
  • Im sich öffnenden Fenster kann mit „New“ ein neuer Connection-Manager erstellt werden:
    ssis_postgres_4
  • Hier wird dann „PostgreSQL35W-32“ ausgewählt (dies ist der Name der Anfangs für die ODBC-Quelle gesetzt wurde. Nachdem Username und Passwort gesetzt wurden, kann mit „ok“ bestätigt werden
  • Anschließend wird eine neue ADO NET Source angelegt und mit dem Button „New“ im neuen Fenster der Postgres-Connection-Manager ausgewählt und ok geklickt:
    ssis_postgres_5
  • Nun kann im Dropdown unter „Name oft he table or view“ die Tabelle ausgewählt und ok geklickt werden
  • Der Einfachheit halber habe ich in diesem Beispiel nachfolgend nur einen Sortier-Task hinzugefügt und nach ID sortiert:
    ssis_postgres_6

Fazit

Der Weg über die Extra ODBC-Datenquelle die über den ODBC-Administrator angelegt werden muss ist zwar ein wenig umständlich, aber er führt letztendlich zum Ziel. Es gibt meinen Recherchen nach, noch einen nativen Postgres-Treiber namens „PGNP OLEDB Provider for PostgreSQL, Greenplum and Redshift“ der unter [2] bezogen werden kann. Dieser Treiber ist allerdings kostenpflichtig, und ich habe ihn mir bisher noch nicht näher angesehen.

Links

[1] https://ftp.postgresql.org/pub/odbc/versions/msi/

[2] http://www.pgoledb.com/

 

 

Schreibe einen Kommentar