ich habe ein kleines Problemchen mit einem ODBC-FDW, das ich mir nicht erklären kann.
Ziel ist es, Daten von einer Progress-Datenbank auszulesen und in Postgre zu importieren. Dazu nutze ich einen ODBC Data-Wrapper, der mir die Daten mit Hilfe eines Progress-ODBC-Treibers abholt.
Nun ist es so, dass ich eine andere Anzahl von Daten zurückbekomme, sofern ich eine bestimmte Spalte in der Abfrage hinzfüge oder auslasse. Die Spalte ist ein Array-Feld in der Progress-Datenbank - das sollte aber eigentlich irrelvant sein.
Noch ein paar Rahmeninformationen:
Die Werte in dieser Spalte sind in allen Datensätzen 100% identisch. Bei den vorhandenen Datensätzen werden die Array-Werte mit “;” getrennt ausgegeben - aber wie gesagt: Der Inhalt ist in allen Datensätzen komplett identisch. Keine versteckten Leerzeichen, \n, \t oder sonstigen Überraschungen.
Codepage zwischen Postgre und Progress ist identisch.
Der identische ODBC-Treiber gibt mir in einer EXCEL-Datenabfrage Alle Datensätze zurück.
Postgre läuft auf einem Windows Server
Ich bin hier wirklich langsam am verzweifeln, da ich überhaupt keinen Anhaltspunkt habe, wo ich noch gucken kann.
Über Tipps oder Hinweise wäre ich sehr sehr dankbar!
Viele Grüße und schon einmal vorab vielen vielen Dank!
Ich kann die Screenshots kaum lesen (Code sollte man als Text posten, nicht als Bilder) aber was ist denn das für ein Datentyp in Progress? Du schreibst etwas von “arrays”, vielleicht passiert da irgendeine Konvertierung in dem FDW. Hast Du mal versucht die Spalte in Postgres auch als array zu definieren? (also text[] oder varchar[]).
Wenn der FDW nicht mit den Progress Arrays umgehen kann, dann vielleicht eine View in Progress anlegen die das in eine “normale” Text/Varchar Spalte umwandelt (CAST?) und die Foreign Table auf die View zeigen lassen.
Übrigens heisst es PostgreSQL oder einfach nur Postgres
Edit: vielleicht kann man diese Konvertierung (“Array” → varchar) auch in der ODBC Datenquelle konfigurieren.
Vielen Dank für eure Antworten! @castorp war auf der richtigen Spur. Ich hatte zwar das array schon einmal in einen varchar umgewandelt - dabei aber wohl einen Fehler gemacht. mit dem korrekten Befehl funktioniert es nun perfekt!