1

我有一个默认值如下的枚举类型:

app_type apps_status NOT NULL DEFAULT 'undeployed'::apps_status

但是现在每当我尝试插入时,都会收到错误 app_type 不能为空。此外,当您继续尝试时,您会收到错误:Number has already been taken. 知道为什么会这样吗?

4

2 回答 2

2

问题是NOT NULL约束,它由 ORM 填充,并且不可延迟。

首先,尝试将值设置为DEFAULTORM 端。

如果它在您的 ORM 中不是一个可行的解决方案,请尝试添加一个设置默认值的触发器:

create function make_default() returns trigger as $$
begin
  new.app_status := 'undeployed'::apps_status
  return null;
end;
$$ language plpgsql;

create trigger before insert or delete on yourtable
for each row when (new.app_type is null)
execute procedure make_default();

如果这也不起作用,请NOT NULL完全删除约束,并使用约束触发器强制执行它:

create function reject_row() returns trigger as $$
begin
  raise exception 'rejected!'
  return null;
end;
$$ language plpgsql;

create constraint trigger after insert or delete on yourtable
for each row when (new.app_type is null)
execute procedure reject_row();
于 2013-06-12T17:32:38.240 回答
0

感谢所有帮助过的人。然而,经过深入研究,我意识到 PostgreSQL ENUM 不支持默认值,但域支持,所以我使用域代替。域工作正常,并且也在插入默认值。请参阅以下链接: http ://www.sqllines.com/postgresql/how-to/create_user_defined_type

于 2013-06-13T12:03:45.387 回答