PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

GeoServer n'écrira pas dans ma vue actualisable PostgreSQL

Tout d'abord, je ne pourrais pas être plus d'accord avec Frank. Utilisez 9.1 et un déclencheur de table. Cependant, il est possible que ni cela ni une vue ne résolvent votre problème.

Essayez de faire une UPDATE manuelle sur votre vue de psql. Si cela fonctionne, et si vous vous connectez en utilisant le même ID utilisateur avec opengeospatial, alors je dirais que le problème pourrait être qu'opengeospatial est trop intelligent pour son propre bien et "sachant" que les vues ne peuvent pas être mises à jour. Soit ça, soit il essaie un INSERT et vous n'avez pas ajouté de INSERT correspondant règle sur votre point de vue.

Le message "filedata_view est en lecture seule" n'est pas un message que PostgreSQL peut produire. Je me demande si opengeospatial utilise les métadonnées JDBC (en supposant que c'est Java) ou INFORMATION_SCHEMA ou similaire pour interroger le schéma, détermine que filedata_view est une vue, et conclut qu'il ne peut donc pas la mettre à jour.

S'il s'agissait d'un message de PostgreSQL, il dirait à la place :

# 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.

Il peut être instructif d'activer log_statement = 'all' dans postgresql.conf et rechargez postgresql. Re-testez, puis regardez dans les journaux pour voir ce que fait exactement opengeospatial.

S'il s'avère qu'il détecte une vue, vous pourrez peut-être contourner le problème avec un ON SELECT règle ajoutée à une table vide. La table fonctionnera comme une vue, mais GeoServer ne pourra pas dire qu'il s'agit d'une vue et pourrait accepter d'y écrire.