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フィールドにアクセスするにはどうすればよいですか?
- 汎用トリガーのさまざまな列から値を取得する