PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

GeoServer schreibt nicht in meine aktualisierbare PostgreSQL-Ansicht

Erstens könnte ich Frank nur zustimmen. Verwenden Sie 9.1 und einen Tabellenauslöser. Es ist jedoch möglich, dass weder das noch eine Ansicht Ihr Problem löst.

Versuchen Sie, ein manuelles UPDATE durchzuführen aus Ihrer Sicht von psql. Wenn das funktioniert und Sie sich mit derselben Benutzer-ID wie OpenGeospatial verbinden, dann würde ich sagen, dass das Problem darin bestehen könnte, dass OpenGeospatial zu schlau für sein eigenes Wohl ist und „weiß“, dass Ansichten nicht aktualisiert werden können. Entweder das, oder es versucht ein INSERT und Sie haben kein passendes INSERT hinzugefügt entscheiden Sie über Ihre Meinung.

Die Meldung „filedata_view is read-only“ ist keine Meldung, die PostgreSQL möglicherweise erzeugt. Ich frage mich, ob Opengeospatial JDBC-Metadaten (vorausgesetzt, es ist Java) oder INFORMATION_SCHEMA oder ähnliches verwendet, um das Schema abzufragen, bestimmt, dass filedata_view ist eine Ansicht und kommt zu dem Schluss, dass sie diese daher nicht aktualisieren kann.

Wenn es eine Nachricht von PostgreSQL wäre, würde es stattdessen sagen:

# UPDATE customer_v SET customer_number = 1234; 
ERROR:  cannot update view "the_view" 
HINT:  You need an unconditional ON UPDATE DO INSTEAD rule or an INSTEAD OF UPDATE trigger.

Es kann aufschlussreich sein, log_statement = 'all' zu aktivieren in postgresql.conf und postgresql neu laden. Testen Sie erneut und schauen Sie dann in die Protokolle, um zu sehen, was genau opengeospatial tut.

Wenn sich herausstellt, dass eine Ansicht erkannt wird, können Sie das Problem möglicherweise mit einem ON SELECT umgehen Regel zu einer leeren Tabelle hinzugefügt. Die Tabelle funktioniert genau wie eine Ansicht, aber GeoServer kann nicht erkennen, dass es sich um eine Ansicht handelt, und stimmt möglicherweise zu, in sie zu schreiben.