如果为空字符串,请使用DEFAULT值

时间:2014-01-19 11:27:56

标签: sql postgresql

我如何告诉Postgres一个空字符串的列应该使用DEFAULT值?

使用CHECK似乎无效。

1 个答案:

答案 0 :(得分:1)

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

为了使用值'active'静默替换空字符串(或null),您需要一个触发器:

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;

您甚至可以将该逻辑扩展为仅使用所需值替换仅空白值(' ')。

尽管可以在触发器中动态检索默认值(以避免在两个地方具有相同的常量),但出于性能原因,我不会这样做。