我有一个表格,其中包含MACADDR类型的字段“mac”。现在,当有人插入空字符串而不是mac地址时,我想处理一种情况(可能带有触发器?)。我想将此空字符串转为NULL,因此postgresql不会抱怨:类型为macaddr的输入语法无效:“”
我现在的触发功能是:
IF CHAR_LENGTH(NEW.mac) = 0 THEN
NEW.mac := NULL;
END IF;
但它似乎不起作用。如果你想在数据库级别处理这个问题,你会怎么做?
非常感谢你。 -Jan
PS:我是一个postgresql新手。但是一个着迷的人:)答案 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本身。