[PostNAS] Antworten zu Delete/Replace

"Jäger, Frank (KRZ)" F.Jaeger at KRZ.DE
Mo Okt 29 02:30:29 PDT 2012


Moin!

> Hat sich eigentlich mal jemand die Trigger angeschaut?

Meine Frage vom Mai darf ich mir jetzt selbst mit "Nein" beantworten.

Wir haben seit Monaten Probleme nach Aktualisierungen der NBA-Sekundärbestände. Nach einer NBA-Erstabgabe sieht das Kartenbild zunächst vollständig aus. Nach Aktualisierung mit Differenzdaten sind dann die Flurstücke nicht mehr flächendeckend, Grundbücher haben in der Auskunft keine Eigentümer mehr usw.
Ich habe nun heraus gefunden, dass es an dem Trigger im Datenbankschema [1] liegt, der die "replace"-Sätze verarbeitet.

CREATE .. FUNCTION delete_feature_kill() ..
..
        ELSE
                -- replace
                query := 'DELETE FROM ' || NEW.typename || ' WHERE gml_id = ''' || gml_id || '''';
                EXECUTE query;
                -- alkis_beziehungen bleibt so
        END IF;

Es wird vom Konverter zunächst das neue Objekt eingefügt, dann erst der replace-Satz in die delete-Tabelle, der den Trigger auslöst.
Zu dem Zeitpunkt stehen also altes und neues Objekt in der Objekt-Tabelle und beide haben dummerweise die gleiche "gml_id".

Da über die "gml_id" das SQL delete qualifiziert wird, erwischt es auch den neuen Satz. Somit hat der NAS "replace" die Wirkung vom NAS "delete".

Ich hatte die ganze Zeit vermutet, das wäre ein lokales Problem, denn niemand anderes hat von ähnlichen Problemen berichtet. 
Wenn das Schema auf dem Trunk benutzt wurde, müssen aber eigentlich alle das gleiche Problem haben. Warum hat niemand etwas gemerkt?

Der Trick ist nun, in dem Trigger den Datensatz zum alten Objekt zu löschen aber den neuen Datensatz drin zu lassen.
Ich denke, ich habe eine Lösung gefunden, aber nicht sehr elegant: Das maximale "beginnt" zu einer gml_id wird zuvor ermittelt und beim SQL delete verschont. Hätte man diese Info in der delete-Tabelle wäre es schneller und sicherer.

Bevor ich eine neue Version hoch lade, werde ich erst mal ein paar Gemeinden konvertieren und die Ergebnisse prüfen.


Frank

[1] http://trac.wheregroup.com/PostNAS/browser/trunk/data/konvert/postnas_0.7/alkis_PostNAS_0.7_schema.sql


-----Ursprüngliche Nachricht-----
Von: nas-bounces at lists.osgeo.org [mailto:nas-bounces at lists.osgeo.org] Im Auftrag von Frank
Gesendet: Mittwoch, 9. Mai 2012 07:51
An: nas at lists.osgeo.org
Betreff: Re: [PostNAS] RE: Antworten zu Delete/Replace

Moin!

Hat sich eigentlich mal jemand die Trigger angeschaut?

Ich hatte den gdal-Patch und die Info aus einer Mail mit dem alten Schema zusammen gefügt und das ganze ins PostNAS-SVN gestellt.

Ich habe aber noch nie mit PostgreSQL-Triggern und -Functions gearbeitet. Es könnte sein, dass ich dabei etwas Fundamentales falsch gemacht habe.

Jedenfalls findet der Trigger nicht die zu löschenden alten Objekte.
(ausführliche Beschreibung in meiner Mail vom 25.04.)

Funktioniert das bei euch, oder nicht?


Am 25.04.2012 13:55, schrieb Armin Retterath:
> Hallo Frank,
>
> werde den Patch auch in den nächsten Tagen bei den ATKIS Daten aus RP 
> ausprobieren. Gebe Bescheid wenn ich was herausbekomme.
>
> Gruss
> Armin
>
...
>>> -----Original Message-----
>>> From: nas-bounces at lists.osgeo.org
>>> Sent: Monday, April 23, 2012 1:50 PM
>>> Subject: [PostNAS] Fragen zu Delete/Replace
...
>> Die Tests waren noch nicht ganz erfolgreich. Siehe unten.
...
>> TEST:
>> Variante 2/2a
>>   .. funktioniert mit meinen Daten NICHT bei 'replace'.

...

-- 

Frank Jäger


More information about the NAS mailing list