[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