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

标签 postgresql triggers

我有一个表,其中包含 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/

相关文章:

jquery - 如何仅使用 url 触发 jquery 函数?

postgresql - 如何根据第二层、触发器、postgreSQL自动更新列

postgresql - 如何从 PostgreSQL 中的两个 IP 获取 CIDR?

sql - SQL 查询中的游标

sql - PostgreSQL 查询列上空值最少的行

sql - 在 Postgres 触发器过程中执行的查询是否在同一事务中运行?

sql - 点在postgresql的圆圈内

postgresql - 存储用户定义的段 JSONB 与单独的表?

linux - 如何设置svn自动导出到public_html?