2016-11-09 20 views
0

新しい行が挿入されたときにテーブルを更新するためのトリガを書きたいと思います。私は新しい行がpostgresqlに挿入されたときにテーブルの列を更新するためのトリガー?

CREATE OR REPLACE FUNCTION function_update() 
    RETURNS trigger AS 
$BODY$ 
BEGIN 
    new.geom := ST_SetSRID(ST_MakePoint(new.longitude, new.latitude), 4326); 

RETURN new; 
END; 
$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 100; 
ALTER FUNCTION function_update() 
    OWNER TO postgres; 

のようなトリガ機能を書き込むことによって解決し、私はあなたがBEFOREトリガを使用する必要があり、その後、割り当て

CREATE TRIGGER triggerinsert 
    Before INSERT 
    ON rdpr 
    FOR EACH ROW 
    EXECUTE PROCEDURE function_update(); 

答えて

0

を更新するためにトリガを書いた

UPDATE table SET 
    geom = ST_SetSRID(ST_MakePoint(longitude, latitude), 4326) 
+0

私は値に挿入しようとしていますが、「列」の経度のようなエラーが「存在しません」です。このエラーは何も表示されません。 – indu

+0

@indu: 'new.'接頭辞が欠落し、修正されました。 –

+0

はい、ありがとうございます。 – indu

0

ようupdateaクエリを使用しています新しい値:

CREATE OR REPLACE FUNCTION function_update() 
    RETURNS trigger AS 
$BODY$ 
BEGIN 
    new.geom := ST_SetSRID(ST_MakePoint(new.longitude, new.latitude), 4326); 
    RETURN new; 
END; 
$BODY$ 
LANGUAGE plpgsql; 

これはBEFOREトリガーで行うことができます

CREATE TRIGGER triggerinsert 
    BEFORE INSERT 
    ON rdpr 
    FOR EACH ROW 
    EXECUTE PROCEDURE function_update();
+0

これはそれを行うには間違った方法です。 beforeトリガーを使用し、 'update'を使用しない –

+0

行挿入後に列を更新したい。 – indu

+0

BEFOREトリガーでこれを実行し、挿入された行ごとに(高価な)更新ステートメントを実行する代わりに値を割り当てる方が効率的です**。 AFTERトリガーでそれを行う必要はありません –

関連する問題