[FOSSGIS-Talk] Problem beim Import von WFS in PostgreSQL mit ogr2ogr in Kombination mit dblink auf der DB

Daniel Cebulla daniel.cebulla at jena.de
Mo Jun 27 11:33:36 CEST 2022


Hallo FOSSGIS-Liste,

Ich habe ein sehr spezielles Problem, aber vor allem für solche Fälle 
ist ja diese Liste gedacht...

Ich importiere mit einem geplanten Job Daten über einen 
GetFeature-Request von einem WFS-Service in eine vorhandene Tabelle in 
einer PostgreSQL-Datenbank über ogr2ogr. Der (hier anonymisierte) Befehl 
dafür ist:

ogr2ogr -update -append -f PostgreSQL -nlt POINT -nln tabellenname -doo 
ACTIVE_SCHEMA=schema --config PG_USE_COPY NO -a_srs EPSG:25832 
PG:"host=host port=1234 dbname=db user=user" 
"WFS:http://wfs.service.de?service=WFS&version=1.0.0&request=GetFeature&typeName=NAME&srsName=EPSG:25832"

Dem Nutzer sind per pg_hba.conf entsprechende Rechte eingeräumt, daher 
kein Passwort. Der Import in die Tabelle klappt erst einmal ohne 
Probleme. Auf der Tabelle sitzt eine Trigger-Funktion, welche die 
Änderungen über dblink in eine andere Tabelle auf einer anderen 
PostgreSQL-DB spiegelt. Diese sieht wie folgt aus:|

CREATE OR REPLACE FUNCTION schema.triggerfunctionname()
  RETURNS trigger
  LANGUAGE plpgsql
AS $function$
DECLARE
     str_execute text;
BEGIN
     IF (TG_OP = 'INSERT') THEN
         str_execute := dblink_build_sql_insert('schema.table'::text, 
'1', 1, ARRAY[NEW.gid]::text[], ARRAY[NEW.gid]::text[]);
     ELSIF (TG_OP = 'UPDATE') THEN
         str_execute := dblink_build_sql_update('schema.table'::text, 
'1', 1, ARRAY[NEW.gid]::text[], ARRAY[OLD.gid]::text[]);
      ELSIF (TG_OP = 'DELETE') THEN
         str_execute := dblink_build_sql_delete('schema.table'::text, 
'1', 1, ARRAY[OLD.gid]::text[]);
     END IF;
     PERFORM dblink_exec('map', str_execute);
     RETURN NULL;
END; $function$
;
|
Die Verbindung 'map' wird zuvor über eine andere Funktion geöffnet.

Der Trigger funktioniert eigenständig auch ohne Probleme und ist auf 
vielen Tabellen in Einsatz. Wenn ich auf der Haupttabelle direkt 
Änderungen über INSERT, UPDATE oder DELETE fahre, dann landen diese 
Änderungen auch über dblink auf der richtigen Tabelle schema.tabelle in 
der zweiten Datenbank. Wenn ich den INSERT nun aber über ogr2ogr laufen 
lasse, sucht und schreibt der Trigger die Änderungen nicht in die 
Tabelle in ihrem Schema (obwohl dieses im Trigger definiert ist), 
sondern nach public.tabelle.

Gibt es da irgendwie einen Unterschied zwischen "selbst gemachten" 
Änderungen an einer Tabelle und welchen, die über einen anderen Punk 
(ogr2ogr in diesem Fall) kommen?
Kann mir das nicht so richtig erklären...

Vielen Dank und liebe Grüße

-- 
Daniel Cebulla
Anwendungsbetreuer GIS

Telefon:  03641 49-5190      E-Mail:daniel.cebulla at jena.de

Kommunale Immobilien Jena    Eigenbetrieb der Stadt Jena
Am Anger 26, 07743 Jena      Werkleiter: Karl-Hermann Kliewe
https://www.kij.de


Mehr Informationen über die Mailingliste FOSSGIS-Talk-Liste