2

我想在她的视图更新时更新表格。我使用 postgresql/postgis。

我创建视图。

CREATE VIEW filedata_view
AS SELECT num, id, ST_TRANSFORM(the_geom,900913)
FROM filedata

现在,当它更新时,我想用这些数据更新 TABLE。但我听说触发器不能放在 VIEW 中。那么如何做到这一点呢?

现在我使用这个功能

CREATE OR REPLACE FUNCTION update_table() RETURNS TRIGGER AS ' 
BEGIN 
UPDATE filedata SET id=NEW.id, the_geom=ST_TRANSFORM(NEW.st_transform,70066) where num=NEW.num ;
END;
' LANGUAGE plpgsql;

没关系。但另一个问题。如何添加触发器来查看我这样做

CREATE TRIGGER up_table AFTER UPDATE ON filedata_view
FOR EACH ROW EXECUTE PROCEDURE update_table ();

但得到错误

ERROR: "filedata_view" is not a table.

更新

AS SELECT num, id, ST_TRANSFORM(the_geom,900913)如果我使用它,如何设置列名我得到num列:idst_transform。如何将第三列的名称设置为the_geom

4

1 回答 1

7

对于 PostgreSQL 9.1 及更高版本,在视图上使用DO INSTEAD 触发器。视图触发器很难正确处理,并且不太容易出现多重评估等奇怪问题。

对于 PostgreSQL 9.0 及更低版本,您应该使用规则系统- 请参阅CREATE RULE ... DO INSTEAD。如果可能的话,通常最好更新到 9.1 并使用视图触发器,尤其是对于新用户。规则是棘手的事情。

于 2012-07-26T08:51:11.830 回答