2014-01-19 21 views
0

如何告诉Postgres具有空字符串的列应使用DEFAULT值?如果为空字符串,则使用DEFAULT值

使用CHECK似乎没有在这里工作。

+0

总之:你不能。空字符串仍然是varchar列的有效值。 NULL不是一个值。您可以添加一个限制,禁止字符串长度<1。 – wildplasser

+0

目前我使用检查NOT NULL CHECK(status <>'')DEFAULT'active'' –

+0

看起来好,它会阻止插入空字符串。如果你不想要空字符串,你(或你的前端程序)不应该首先插入它们。 – wildplasser

回答

1

检查约束只会阻止将这样的值放入列中。它不会神奇地用默认值替换提供的值。

为了与价值默默替换为空字符串(或空)'active'你需要一个触发:

create or replace function check_default() 
returns trigger 
as 
$body$ 
begin 
    if (new.status is null or new.status = '') then 
     new.status = 'active'; 
    end if; 
    return new; 
end; 
$body$ 
language plpgsql; 

上述触发会赶上这样的东西:

insert into foo (id, active) 
values (42,''); 

update foo 
    set active = '' 
where id = 42; 

你甚至可以扩展该逻辑,以便仅用空白值(' ')替换所需的值。

虽然有可能在触发动态检索的默认值(以避免在两个地方同样常量)我不会做,对于性能方面的原因。

相关问题