Ich habe zwei Tabellen in PostGIS, eine point- und eine point_buffer-Tabelle. Die Punkttabelle hat ein Feld buffer_distance mit einem Standardwert von beispielsweise 200. Jetzt möchte ich die Geometrie der Puffertabelle ändern, wenn ich den Wert buffer_distance in meiner Punkttabelle ändere. Ich kann dies für eine einzelne Zeile in meiner point_buffer-Tabelle folgendermaßen tun:
UPDATE point_buffer
SET the_geom = (SELECT ST_Buffer(the_geom,500) FROM point WHERE gid = 1)
FROM point
WHERE point.gid = point_buffer.gid
Aber wenn ich versuche, die gesamte point_buffer-Tabelle zu ändern (WHERE-Klausel in meiner Unterabfrage löschen), erhalte ich die folgende Fehlermeldung:
'FEHLER: Mehr als eine Zeile, die von einer als Ausdruck verwendeten Unterabfrage zurückgegeben wird'.
Meine Frage ist, kann ich die gesamte point_buffer-Tabelle auf einmal ändern? Ich weiß, dass eine Option die Verwendung von for lopp ist, wobei die Obergrenze der Zählwert meiner Punktetabelle ist und der point.gid-Wert erhöht wird. Aber ich möchte dies in einfachem SQL tun .
quelle
Sie können eine Ansicht verwenden, aber Sie können auch Trigger verwenden, um Ihre Puffertabelle automatisch zu aktualisieren, wenn Sie die ursprüngliche Punktetabelle ändern. Dies ist sehr nützlich, wenn Sie die Puffer nicht jedes Mal neu generieren möchten, wenn Sie Ihre Tabelle anzeigen, da die Pufferberechnung eine CPU-intensive Aufgabe ist.
Hier ist ein vollständiges Codebeispiel, das es implementiert: eine Punkttabelle und eine point_buffer-Tabelle, die basierend auf den Änderungen der Punkttabelle automatisch aktualisiert werden.
Sie können es mit QGIS testen: Öffnen Sie beide Tabellen und rufen Sie den Bearbeitungsmodus für die Punktetabelle auf. Verschieben Sie einen Punkt oder ändern Sie den Wert für buffer_distance. Jedes Mal, wenn Sie speichern, wird die Pufferschicht aktualisiert.
genießen :)
quelle