继从这个先前的问题我使用的是 PostgreSQL 8.4,并且在可更新视图方面遇到问题。
我有一个看法:
CREATE VIEW filedata_view
AS SELECT num, id, ST_TRANSFORM(the_geom,900913) AS the_geom
FROM filedata
并想从我的应用程序中更新它,抛出 Geoserver。但得到一个错误:
<ServiceExceptionReport version="1.2.0" xmlns="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/wfs/1.0.0/OGC-exception.xsd">
<ServiceException> {http://www.opengeospatial.net/cite}filedata_view is read-only </ServiceException>
</ServiceExceptionReport>
Postgresql 中的视图不可更新。我需要创建规则或触发器来更新视图。
我试过这个:
CREATE OR REPLACE RULE ins_view_2 AS
ON UPDATE TO filedata_view DO INSTEAD UPDATE filedata SET the_geom=ST_TRANSFORM(NEW.the_geom,70066)
WHERE num=NEW.num
但这没有帮助,我仍然遇到同样的错误。
我的错误在哪里?
首先,我非常同意弗兰克的观点。使用9.1和表触发器。但是,无论是该方法还是视图都可能无法解决您的问题。
尝试做一个手册UPDATE
从 psql 来看你的观点。如果这有效,并且如果您使用相同的用户 ID 与 opengeospatial 进行连接,那么我认为问题可能是 opengeospatial 过于聪明,并且“知道”视图无法更新。要么是这样,要么它正在尝试INSERT
并且您还没有添加匹配的INSERT
统治你的观点。
消息“filedata_view is read-only”不是 PostgreSQL 可能生成的消息。我想知道 opengeospatial 是否使用 JDBC 元数据(假设它是 Java)或 INFORMATION_SCHEMA 或类似的查询模式,正在确定filedata_view
是一个视图,因此得出结论,它无法更新它。
如果它是来自 PostgreSQL 的消息,它会显示:
# 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.
启用它可能会提供信息log_statement = 'all'
in postgresql.conf
并重新加载 postgresql.重新测试,然后查看日志,看看 opengeospatial 到底在做什么。
如果事实证明它正在检测视图,您也许可以通过以下方法解决该问题ON SELECT
规则已添加到空表中。该表将像视图一样工作,但 GeoServer 将无法判断它是一个视图,并且可能同意写入它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)