SQL-Abfrage über Foreign Data Wrappers gibt falsche Ergebnisse aus

Hallo,

ich habe eine Abfrage über einen Foreign Data Wrapper aus einer MS-SQL-Datenbank (latin1) erstellt. Genauer gesagt über zwei Wrapper, die beide über ODBC-Laufen.

  1. ogr_fdw
  2. odbc_fdw

Im 1. Fall läuft die Abfrage ganz gut, benötigt aber sehr lange bis alles ausgewertet ist. Aktuell läuft das in eine Materialized View und wird 2x am Tag aktualisiert.

Im 2. Fall läuft die Abfrage schneller (11Sek). Hier liegt die Datenbank in PostgreSQL auch in Latin1 vor. ABER, es werden in einer Spalte keine Ergebnisse ausgegeben.

Hier mal die komplette Abfrage:

 SELECT row_number() OVER (ORDER BY gv."FELD30") AS fid,
    gv."FELD1" AS jahr,
    gv."FELD3" AS az,
    gv."FELD2" AS og,
    gv."FELD15" AS titel,
    gv."FELD19" AS name1,
    gv."FELD20" AS name2,
    gv."FELD4" AS bemerk,
    gv."FELD31" AS bearb,
    gv."FELD35" AS art,
    gv."FELD36" AS vorh,
    gv."FELD10" AS detail,
    gv."FELD9" AS art_2,
    gv."FELD30" AS re,
    gv."FELD29" AS ho,
    vd."BAUGENEHMIGUNG" AS genehmigt,
    vvs."Value" AS bescheinigt,
    vvs."Zeile_id",
    vg."Id",
    concat(gv."FELD1", '_', gv."FELD3", '_', gv."FELD2") AS pid,
    vg."Id" AS vgid,
    vk."Veraltet",
    st_setsrid(st_makepoint(NULLIF(replace(gv."FELD30"::text, ','::text, '.'::text), ''::text)::numeric::double precision, NULLIF(replace(gv."FELD29"::text, ','::text, '.'::text), ''::text)::numeric::double precision), 25832)::geometry(Point,25832) AS geom
   FROM gisview1 gv
     LEFT JOIN pbsvorgang vg ON concat(gv."FELD1", '_', gv."FELD2", '_', gv."FELD3") = concat(vg."Jahr", '_', ( SELECT og."Kuerzel"
           FROM pbpobergruppe og
          WHERE vg."Obergruppe_id"::text = og."Id"::text), '_', vg."Aktenzeichen")
     LEFT JOIN pbsvorgangkataster vk ON vg."Id"::text = vk."Vorgang_Key1"::text AND gv."FELD39" = vk."OrderId"
     LEFT JOIN ( SELECT vorgdat."JAHR",
            vorgdat."AZ",
            vorgdat."OG",
            vorgdat."BAUGENEHMIGUNG"
           FROM vorgdat
          GROUP BY vorgdat."JAHR", vorgdat."OG", vorgdat."AZ", vorgdat."BAUGENEHMIGUNG") vd ON concat(gv."FELD1", '_', gv."FELD2", '_', gv."FELD3") = concat(vd."JAHR", '_', vd."OG", '_', vd."AZ")
     LEFT JOIN ( SELECT pbsvorgangverfahrensstand."Vorgang_Key1",
            pbsvorgangverfahrensstand."Zeile_id",
            pbsvorgangverfahrensstand."Value"
           FROM pbsvorgangverfahrensstand
          WHERE pbsvorgangverfahrensstand."Zeile_id"::text = '1A52B64F-0B28-11E8-8630-902B34612971'::text) vvs ON vg."Id"::text = vvs."Vorgang_Key1"::text
  WHERE gv."FELD29" > 0::double precision AND gv."FELD35" = 1 AND vk."Veraltet" IS NULL OR gv."FELD29" > 0::double precision AND gv."FELD35" = 2 AND vk."Veraltet" IS NULL OR gv."FELD29" > 0::double precision AND gv."FELD35" = 3 AND vk."Veraltet" IS NULL OR gv."FELD29" > 0::double precision AND gv."FELD35" = 4 AND vk."Veraltet" IS NULL OR gv."FELD29" > 0::double precision AND gv."FELD35" = 8 AND vk."Veraltet" IS NULL OR gv."FELD29" > 0::double precision AND gv."FELD35" = 32 AND vk."Veraltet" IS NULL OR gv."FELD29" > 0::double precision AND gv."FELD35" = 40 AND vk."Veraltet" IS NULL OR gv."FELD29" > 0::double precision AND gv."FELD35" = 52 AND vk."Veraltet" IS NULL OR gv."FELD29" > 0::double precision AND gv."FELD35" = 53 AND vk."Veraltet" IS NULL;

Wichtig ist dieser Abschnitt:
concat(vg.“Jahr”, ‘’, ( SELECT og.“Kuerzel”
FROM pbpobergruppe og
WHERE vg.“Obergruppe_id”::text = og.“Id”::text), '
’, vg.“Aktenzeichen”)

Lasse ich folgende Abfrage im 1. Fall durchlaufen, erhalte ich eine Korrekte Auswertung:

select concat(vg.Jahr, '_', ( SELECT og.Kuerzel
           FROM dbo_pbpobergruppe og
          WHERE vg.Obergruppe_id::text = og.Id::text), '_', vg.Aktenzeichen) from dbo_pbsvorgang vg

2019_~_922
2019_~_923
2020_~_773
2020_~_966

Mache ich das im 2. Fall, dann fehlt der Wert aus der mittleren Select-Abfrage ab dem zweiten Ergebnis:

select concat(vg."Jahr", '_', ( SELECT og."Kuerzel"
           FROM pbpobergruppe og
          WHERE vg."Obergruppe_id"::text = og."Id"::text), '_', vg."Aktenzeichen") from pbsvorgang vg

2019_~_922
2019__923
2020__773
2020__966

Woran kann das liegen? Ich hoffe, ich habe das Problem einigermaßen geschildert. Die Datenbank ist eine Postgres 14.4

Gruß

Nachtrag: Die " in der Abfrage Fall2 sind nötig, da dort auf Groß- und Kleinschreibung geachtet wird.

Hallo,

ich vermute das aus irgendeinem Grund vg."Obergruppe_id"::text = og."Id"::text nicht match.

Wie sieht das Ergebnis vom nachfolgendem Select aus?

select  concat(vg."Jahr", '_', og."Kuerzel", '_', , vg."Aktenzeichen")
        , vg."Obergruppe_id"
        , og."Id"
    from pbsvorgang vg
        left outer join pbpobergruppe og
            on vg."Obergruppe_id"::text = og."Id"::text

Hallo,

ja das sieht schon gut aus. Jetzt muss ich das noch in das Gesamtkonzept umsetzen. Vielen Dank für den Schubser in die richtige Richtung.

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.