Pet*_*zar 2 postgresql triggers
我有一个表MACIDDR类型的字段"mac".现在,当有人插入空字符串而不是mac地址时,我想处理一种情况(可能带有触发器?).我想将此空字符串转为NULL,因此postgresql不会抱怨:类型为macaddr的输入语法无效:""
我现在的触发功能是:
IF CHAR_LENGTH(NEW.mac) = 0 THEN
NEW.mac := NULL;
END IF;
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用.如果你想在数据库级别处理这个问题,你会怎么做?
非常感谢你.-Jan
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;
Run Code Online (Sandbox Code Playgroud)
然后:
insert into t (addr) values (macaddr_ify(str));
Run Code Online (Sandbox Code Playgroud)
我建议您的客户端应用程序正确地将空MAC地址字符串转换为NULL本身.
| 归档时间: |
|
| 查看次数: |
3060 次 |
| 最近记录: |