sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLアップデートトリガー

    @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();

    ただし

    もし テーブルに関数従属値を保持しようとしているだけです(他の考慮事項はありません):しないでください 。代わりに、ビューまたは生成された列を使用してください:

    そうすれば、これは必要ありません。



    1. OracleデータベースからMariaDBへの移行-詳細

    2. OracleクエリでTo_Date()から時間のみを取得しますか?

    3. 脱出する方法は? (疑問符)RailsでPostgresqlJSONBタイプをクエリする演算子

    4. SQLite RealvalsをJavaBigDecimal値に書き込むにはどうすればよいですか?