Postgresql触发器将空字符串设置为NULL

时间:2011-05-28 14:57:16

标签: postgresql triggers

我有一个表格,其中包含MACADDR类型的字段“mac”。现在,当有人插入空字符串而不是mac地址时,我想处理一种情况(可能带有触发器?)。我想将此空字符串转为NULL,因此postgresql不会抱怨:类型为macaddr的输入语法无效:“”

我现在的触发功能是:

IF CHAR_LENGTH(NEW.mac) = 0 THEN
  NEW.mac := NULL;
END IF;

但它似乎不起作用。如果你想在数据库级别处理这个问题,你会怎么做?

非常感谢你。 -Jan

PS:我是一个postgresql新手。但是一个着迷的人:)

1 个答案:

答案 0 :(得分:5)

你不能用触发器做你想做的事。您的传入空字符串将被解析并转换为macaddr(或至少将尝试解析) 执行触发器之前。但是,您可以编写一个简单的函数将空字符串转换为NULL并在INSERT中使用它:

create function macaddr_ify(m varchar) returns macaddr as $$
begin
    if m is null or length(m) = 0 then
        return null;
    end if;
    return cast(m as macaddr);
end;
$$ language plpgsql;

然后:

insert into t (addr) values (macaddr_ify(str));

我建议您的客户端应用程序正确地将空MAC地址字符串转换为NULL本身。