Проблема заключается в ограничении NOT NULL
, которое заполнено ORM, и не откладывается.
Прежде всего, попробуйте установить значение DEFAULT
на стороне 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();
Видимо Rails передает значение NULL (вместо ключевого слова 'default' или просто опустив столбец) –
Но те же самые рельсы приложение работает с MySQL. – zulq
MySQL, как известно, заменяет значения, не сообщая вам (или разрешать нули в непустых столбцах) –