Zugriff auf eine MSSQL-Datenbank sehr langsam

Hallo Forum,

das ist hier mein erster Beitrag und ich bin kein Datenbankprofi. Also habt etwas Geduld mit mir. :innocent:

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:

  1. PostgreSQL (aktuelle Version) auf einem Windows-Server installiert. Mit pgAdmin4. (Datenbank läuft, Zugriff über das Netzwerk über pgAdmin läuft auch)
  2. PostGIS Extension installiert
  3. ogr_fdw Extension installiert
  4. 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 :+1:
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?

Danke.

Hast Du mal versucht den https://github.com/tds-fdw/tds_fdw zum Laufen zu kriegen?

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.

Hallo,

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.

Gruß

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.

Gruß

So, inzwischen habe ich tds_fdw für Windows bekommen.

CREATE SERVER fdw_mssql

FOREIGN DATA WRAPPER tds_fdw

OPTIONS (servername ‘xxx.xxx.xxx.xxx’, port ‘1433’, msg_handler ‘notice’, tds_version 7.4‚ database ‘NamederDatenbank’);

Das passt. USER MAPPING funktioniert auch.

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.