我有一个默认值如下的枚举类型:
app_type apps_status NOT NULL DEFAULT 'undeployed'::apps_status
但是现在每当我尝试插入时,都会收到错误 app_type 不能为空。此外,当您继续尝试时,您会收到错误:Number has already been taken.
知道为什么会这样吗?
我有一个默认值如下的枚举类型:
app_type apps_status NOT NULL DEFAULT 'undeployed'::apps_status
但是现在每当我尝试插入时,都会收到错误 app_type 不能为空。此外,当您继续尝试时,您会收到错误:Number has already been taken.
知道为什么会这样吗?
问题是NOT NULL
约束,它由 ORM 填充,并且不可延迟。
首先,尝试将值设置为DEFAULT
ORM 端。
如果它在您的 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();
感谢所有帮助过的人。然而,经过深入研究,我意识到 PostgreSQL ENUM 不支持默认值,但域支持,所以我使用域代替。域工作正常,并且也在插入默认值。请参阅以下链接: http ://www.sqllines.com/postgresql/how-to/create_user_defined_type