我有一个表,其中包含 MACADDR 类型的字段“mac”。现在我想处理当有人插入空字符串而不是 mac 地址时的情况(可能使用触发器?)。我想把这个空字符串转为NULL,这样postgresql就不会提示:类型macaddr的输入语法无效:“”
我现在的触发函数是这样的:
IF CHAR_LENGTH(NEW.mac) = 0 THEN
NEW.mac := NULL;
END IF;
但是好像不行。如果您想在数据库级别处理这个问题,您会怎么做?
非常感谢。 -一月
PS:我是 postgresql 新手。但令人着迷:)
最佳答案
你不能用触发器做你想做的事。您传入的空字符串将在执行触发器之前被解析并转换为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。
关于Postgresql 触发器将空字符串设置为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6162376/