列にデフォルト値を設定しても機能しないため、トリガーが必要なのは正しいです。デフォルト値は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:前に起動するトリガーを作成します insertは、挿入される前に値を変更できるようにし、上記の関数を呼び出します。
CREATE TRIGGER my_trigger
BEFORE INSERT ON T
FOR EACH ROW
EXECUTE PROCEDURE my_trigger_function()
これで完了です。
SQLFIddleで実行されている上記のコードを参照して、正しく機能することを示してください!
コメントで、値'X'
サブクエリから取得されます。その場合は、関連する行を次のように変更します。
NEW.C1 := (select some_column from some_table where some_condition);