Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 视图更新时如何更新表?_Postgresql_Postgis - Fatal编程技术网

Postgresql 视图更新时如何更新表?

Postgresql 视图更新时如何更新表?,postgresql,postgis,Postgresql,Postgis,我想在更新她的视图时更新表。我使用postgresql/postgis 我创建视图 CREATE VIEW filedata_view AS SELECT num, id, ST_TRANSFORM(the_geom,900913) FROM filedata 现在当它更新时,我想用这些数据更新表。但我听说触发器是不可能出现的。那么如何做到这一点呢 现在我使用这个函数 CREATE OR REPLACE FUNCTION update_table() RETURNS TRIGGER AS '

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

我创建视图

CREATE VIEW filedata_view
AS SELECT num, id, ST_TRANSFORM(the_geom,900913)
FROM filedata
现在当它更新时,我想用这些数据更新表。但我听说触发器是不可能出现的。那么如何做到这一点呢

现在我使用这个函数

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.
更新


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

对于PostgreSQL 9.1及以上版本,请在视图上使用。视图触发器的正确性要低得多,并且在多次求值等情况下不太容易出现奇怪的问题


对于PostgreSQL 9.0及以下版本,应使用-请参阅。通常最好更新到9.1并尽可能使用视图触发器,特别是对于新用户。规则很棘手。

说可以在视图上设置触发器。但是,这是第9.1页中的一个新功能。该功能似乎在
WHERE
之后被切断。请更新该部分。Kliver,正如@LisMorski所说,您必须使用PostgreSQL 9.1才能在视图上使用触发器。您正在使用旧版本。升级(最好)或者如果您确实无法升级,请使用
规则
;请参阅我答案中的链接。用户在此处发布了一个后续问题,以防以后有人阅读:对于您的“更新”问题:将列名从
st_transform
更改为
the_geom
,将
作为_geom
添加到select语句中。您能举例说明如何使用规则生成触发器吗?@KliverMax触发器和规则是不同的。您不使用规则触发,而是使用
DO
规则通过重写直接生成可更新的视图。如果您不能通过阅读我上面链接的文档来做到这一点,那么我强烈建议您升级到PostgreSQL 9.1并使用视图触发器,因为规则不适合初学者。文档中有一些例子,太难了。我创建表的触发器,而不是视图的触发器。