@SpartanEliteが指摘したように 、あなたは無限ループを引き起こしています。
トリガー機能を簡素化する:
CREATE OR REPLACE FUNCTION set_angle()
RETURNS TRIGGER AS
$func$
BEGIN
NEW."rotationAngle" := degrees(
ST_Azimuth(
ST_StartPoint(NEW.the_geom)
, ST_EndPoint(NEW.the_geom)
)
) - 90;
RETURN NEW;
END
$func$ LANGUAGE plpgsql;
-
NEW
に割り当てます 直接。WHERE
はありません この場合。 - あなたはしなければならない 不正な列名を二重引用符で囲んでください。そもそもそのような名前を使用しない方がよいでしょう。
最近関連する回答。 - 挿入とアップグレードのコードは同じです。 1つのコードパスに折りたたんだ。
BEFORE
を使用する 引き金。このようにして、トリガー行の列を直前に直接編集できます。 それらは保存されます:
CREATE TRIGGER set_angle
BEFORE INSERT OR UPDATE ON annotations
FOR EACH ROW EXECUTE PROCEDURE set_angle();
ただし
もし テーブルに関数従属値を保持しようとしているだけです(他の考慮事項はありません):しないでください 。代わりに、ビューまたは生成された列を使用してください:
そうすれば、これは必要ありません。