das ist hier mein erster Beitrag und ich bin kein Datenbankprofi. Also habt etwas Geduld mit mir.
Was ich möchte: Ich möchte von einer PostgreSQL-Datenbank auf eine MSSQL-Datenbank zugreifen. Für die MSSQL-Datenbank liegen nur Leseberechtigungen vor.
Was bisher gemacht wurde:
PostgreSQL (aktuelle Version) auf einem Windows-Server installiert. Mit pgAdmin4. (Datenbank läuft, Zugriff über das Netzwerk über pgAdmin läuft auch)
PostGIS Extension installiert
ogr_fdw Extension installiert
Foreign Server erstellt. Hier fangen die Probleme an:
CREATE SERVER fdw_sqlserver
FOREIGN DATA WRAPPER ogr_fdw
OPTIONS (datasource ‘ODBC:BENUTZER/PASSWORT@ODBCName’, format ‘ODBC’);
Das funktioniert. Fand ich klasse
Mit IMPORT FOREIGN SCHEMA habe ich eine VIEW (test1) aus der MSSQL geholt.
Auch das passte.
Aber wenn ich jetzt eine einfache Abfrage mache: SELECT a.feld99 FROM test1; mache, dauert das bestimmt 8 oder 9 Sekunden, bis ein Ergebnis erscheint. Habe es im pgAdmin4 gemacht. psql.exe ist es auch nicht schneller. liegt das daran, wie der Server (ODBC) erstellt wurde?
Ich hatte vorher versucht, den Server über folgendes zu erstellen:
CREATE SERVER fdw_sqlserver
FOREIGN DATA WRAPPER ogr_fdw
OPTIONS (
datasource ‘MSSQL:server=xxx.xxx.xxx.xxx;database=DATENBANKNAME;UID=BENUTZER;PWD=PASSWORT’,
format ‘MSSQLSpatial’,config_options ‘USE_GEOMETRY_COLUMNS=NO’);
Das funktionierte aber nicht. Mal sagte pgAdmin Query returned successfully, ohne den Server zu erstellen. Dann wieder ERROR: FEHLER: GDAL AppDefined [1] GDALOpen() called on MSSQL:server=xxx.xxx.xxx.xxx;database=DATENBANKNAME;UID=BENUTZER;PWD=PASSWORT recursively
Wo könnte hier das Problem liegen? Warum ist die Abfrage über ODBC so träge?
Weiß aber nicht, ob das auf Windows überhaupt klappt - grundsätzlich ist es viel einfacher und auch effizienter Postgres auf Linux zu betreiben, da viele interessante und hilfreiche Erweiterungen nur dort verfügbar sind.
nein, den kannte ich vorher noch nicht. Der Server ist leider vorgegeben.
Edit: Für Windows scheint des den nicht zu geben. Zumindest nicht für die aktuelle PostgreSQL-Version.
Hallo!
Ist der Ursprungsserver schnell genug? ODBC ist irgendwie auch nicht so ein Speedwunder WIMRE. Windows an sich auch nicht ;).
Falls du die Daten nicht immer direkt und sofort brauchst, könntest du dir aus den Foreign Tables einen Materialized View erstellen und den in regelmässigen Abständen aktualisieren. Den kannst du auch so indizieren wie du magst.
Gruß Uwe
Der Ursprungsserver ist flott genug. ODBC ist nicht optimal. Windows auch nicht. Windows kann ich nicht ändern. Wenn jemand eine Alternative für ODBC hat…
Ein MV ist auch noch eine gute Option. Danke. Live wäre schöner, zur Not dann vielleicht eine MV.
Aber dann gibt es Probleme. Zum Testen hole ich mir das FELD4 aus der VIEW1 der MS-Datenbank
CREATE FOREIGN TABLE public.VIEW1
(FELD4 text)
SERVER fdw_mssql
OPTIONS (query ‘dbo.VIEW1’);
Wird auch gemacht aber die Felder sind leer.
Ein
IMPORT FOREIGN SCHEMA “dbo.VIEW1”
FROM SERVER fdw_mssql INTO public;
wird mit dieser Meldung quitiert:
HINWEIS: tds_fdw: No table were found in schema dbo.VIEW1
Ich fürchte, dass tds eine Sackgasse ist und es bei ODBC bleiben muss.