我如何告诉Postgres一个空字符串的列应该使用DEFAULT
值?
使用CHECK
似乎无效。
答案 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;
您甚至可以将该逻辑扩展为仅使用所需值替换仅空白值(' '
)。
尽管可以在触发器中动态检索默认值(以避免在两个地方具有相同的常量),但出于性能原因,我不会这样做。