Postgresql にテーブルがありT
、その列の 1 つが であると仮定しますC1
。
新しいレコードがテーブルに追加されるときに関数をトリガーしたいと思いますT
。関数は新しいレコードの列の値をチェックしC1
、それが null/空の場合はその値を に設定する必要があります'X'
。
これは可能ですか?
ベストアンサー1
列のデフォルト値を設定しても機能しないため、トリガーが必要であることは正しいです。デフォルト値はnull
値に対してのみ機能し、空白の値を防ぐのに役立ちません。
postgres では、トリガーを作成するにはいくつかの手順があります。
ステップ1: 型を返す関数を作成しますtrigger
。
CREATE FUNCTION my_trigger_function()
RETURNS trigger AS $$
BEGIN
IF NEW.C1 IS NULL OR NEW.C1 = '' THEN
NEW.C1 := 'X';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql
ステップ2: 上記の関数を呼び出して発火するトリガーを作成しBEFORE INSERT
、入力値を変更できるようにします。前に彼らはテーブルにぶつかった。
CREATE TRIGGER my_trigger
BEFORE INSERT ON T
FOR EACH ROW
EXECUTE PROCEDURE my_trigger_function()
これで完了です。
コメントで、値が'X'
サブクエリから取得されると書かれています。その場合は、関連する行を次のように変更します。
NEW.C1 := (select some_column from some_table where some_condition);