假设在Postgresql中,我有一个表T
,其中一列是C1
.
我想在向表T
添加新记录时触发一个函数.函数应该判断新记录中第C1
列的值,如果为null/空,则将其值设置为'X'
.
这可能吗?
假设在Postgresql中,我有一个表T
,其中一列是C1
.
我想在向表T
添加新记录时触发一个函数.函数应该判断新记录中第C1
列的值,如果为null/空,则将其值设置为'X'
.
这可能吗?
您需要触发器是正确的,因为为列设置默认值对您不起作用-默认值仅适用于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()
你完了.
请参阅the above code executing on SQLFIddle演示它是否正常工作!
您在注释中提到,值'X'
是从子查询中检索到的.如果是,请更改相关行,如下所示:
NEW.C1 := (select some_column from some_table where some_condition);