Primo, non potrei essere più d'accordo con Frank. Utilizzare 9.1 e un trigger di tabella. Tuttavia, è possibile che né quello né una vista risolvano il tuo problema.
Prova a fare un UPDATE
manuale sulla tua vista da psql. Se funziona e se ti connetti utilizzando lo stesso ID utente con opengeospatial, direi che il problema potrebbe essere che opengeospatial è troppo intelligente per il suo bene e "sapere" che le viste non possono essere aggiornate. O quello, o sta provando un INSERT
e non hai aggiunto un INSERT
corrispondente regola il tuo punto di vista.
Il messaggio "filedata_view is read-only" non è un messaggio che PostgreSQL potrebbe produrre. Mi chiedo se opengeospatial stia usando i metadati JDBC (supponendo che sia Java) o INFORMATION_SCHEMA o simili per interrogare lo schema, sta determinando che filedata_view
è una vista e sta concludendo che quindi non può aggiornarla.
Se fosse un messaggio di PostgreSQL direbbe invece:
# 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.
Potrebbe essere utile abilitare log_statement = 'all'
in postgresql.conf
e ricaricare postgresql. Ripeti il test, quindi guarda nei log per vedere cosa sta facendo esattamente opengeospatial.
Se si scopre che sta rilevando una vista, potresti essere in grado di aggirare il problema con un ON SELECT
regola aggiunta a una tabella vuota. La tabella funzionerà proprio come una vista, ma GeoServer non sarà in grado di dire che si tratta di una vista e potrebbe accettare di scrivervi.