【发布时间】:2012-07-26 07:19:36
【问题描述】:
我想在她的视图更新时更新表格。我使用 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、id 和 st_transform。如何将第三列的名称设置为the_geom?
【问题讨论】:
-
postgresql.org/docs/9.1/static/sql-createtrigger.html 表示可以在视图上设置触发器。但 AFAIK 这是 PG 9.1 中的一个新功能。
-
WHERE后面的功能好像被切断了。请更新该部分。 -
Kliver,正如@LisMorski 所说,您必须使用 PostgreSQL 9.1 才能在视图上使用触发器。您使用的是旧版本。升级(最好)或者如果你真的不能升级,使用
RULE代替;请参阅我的答案中的链接。 -
用户在此处发布了一个后续问题,以防以后有人阅读:stackoverflow.com/questions/11681852/…
-
对于您的“更新”问题:要将列名从
st_transform更改为the_geom,请将AS the_geom添加到您的选择语句中。
标签: postgresql postgis