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、、idおよびst_transform。3番目の列の名前をに設定するにはどうすればよい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 に答える