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

動的フィールド名でトリガー

    hstoreを使用すると、かなり便利に実装できます。 演算子#=

    追加のモジュールが正しくインストールされていることを確認します(1回 データベースごと)、search_pathに含まれているスキーマ内 :

    • 拡張機能pg_trgmの%演算子を使用するにはどうすればよいですか?
    • Postgresデータベースの複数のスキーマにhstoreをインストールする最良の方法は?

    トリガー機能:

    CREATE OR REPLACE FUNCTION tbl_insup_bef()
      RETURNS TRIGGER AS
    $func$
    DECLARE
       _prefix CONSTANT text := 'some prepend data'; -- your prefix here
       _prelen CONSTANT int  := 17;  -- length of above string (optional optimization)
       _col text := quote_ident(TG_ARGV[0]);
       _val text;
    BEGIN
       EXECUTE 'SELECT $1.' || _col
       USING NEW
       INTO _val;
    
       IF left(_val, _prelen) = _prefix THEN 
          -- do nothing: prefix already there!
       ELSE
          NEW := NEW #= hstore(_col, _prefix || _val);  
       END IF;
    
       RETURN NEW;
    END
    $func$  LANGUAGE plpgsql;
    

    トリガー(複数のテーブルに同じ関数を再利用):

    CREATE TRIGGER insup_bef
    BEFORE INSERT OR UPDATE ON tbl
    FOR EACH ROW
    EXECUTE PROCEDURE tbl_insup_bef('fieldName');  -- unquoted, case-sensitive column name
    

    より多くの説明とアドバイスと密接に関連しています:

    • 動的な列名を持つ列の割り当て
    • フィールド名のみを指定してNEWまたはOLDフィールドにアクセスするにはどうすればよいですか?
    • 汎用トリガーのさまざまな列から値を取得する


    1. SQLiteAssetHelperを使用して暗号化されたDBからデータを読み取るにはどうすればよいですか?

    2. 一度に複数の値をpostgresテーブルに挿入するにはどうすればよいですか?

    3. SQLiteの日付から日数を引く

    4. SQLiteで毎月第1月曜日を返す