2016-09-27 19 views
1

計算されたカラムを持つために、pgadminでトリガーを作成しようとしています。ポストグルでトリガーを作成する

は私が行う必要があります。c = aが/ B

私は、次のコードが含まれている機能のUpdateC、作成:

UPDATE table_name 
SET c = a/b 
WHERE id = @id 

を、私は、パラメータとして@id宣言しました。

私はトリガーを作成し、それをその関数にリンクすると考えましたが、関数ではなくトリガー関数にリンクする必要があることがわかりました。

今、私は上記とまったく同じSQLでトリガ関数を作成しようとしていますが、私は次のエラーを取得しています:

syntax error at or near "UPDATE"

定義]タブの下で、私は、言語を選択しなければならなかったので、私"plpgsql"を選択しました(他のオプションは "c"と "internal"です)。

ご協力いただければ幸いです。

答えて

5

BEFOREトリガーFOR EACH ROWではなく、UPDATEテーブルを作成する必要がありますが、書き込む前に行を変更してください。

詳細はthe doocumentationを参照してください。ここで

は、コンセプトの証明です:

CREATE TABLE t (
    id integer PRIMARY KEY, 
    a double precision, 
    b double precision, 
    c double precision 
); 

CREATE OR REPLACE FUNCTION t_trig() RETURNS trigger 
    LANGUAGE plpgsql AS 
$$BEGIN 
    NEW.c = NEW.a/NEW.b; 
    RETURN NEW; 
END;$$; 

CREATE TRIGGER t_trig BEFORE INSERT OR UPDATE ON t FOR EACH ROW 
    EXECUTE PROCEDURE t_trig(); 

INSERT INTO t (id, a, b) VALUES (1, 42, 7); 
INSERT 0 1 
test=> SELECT * FROM t; 
┌────┬────┬───┬───┐ 
│ id │ a │ b │ c │ 
├────┼────┼───┼───┤ 
│ 1 │ 42 │ 7 │ 6 │ 
└────┴────┴───┴───┘ 
(1 row) 
関連する問題