我正在使用sqlite。我需要创建一个date
列not nullable
。我试了一下,但没有工作。
return knex.schema.table("my_table", (table) => {
table.date("important_day").notNullable().defaultTo(knex.fn.now());
});
使用此代码,我收到此错误消息:
未处理的拒绝错误:
SQLITE_ERROR
:无法添加具有非常量默认值的列。 Knex:警告 - 迁移失败并显示错误:alter tableminisermao
add columndiaminisermao
date not null defaultCURRENT_TIMESTAMP - SQLITE_ERROR
:无法添加具有非常量默认值的列
如何解决?
答案 0 :(得分:0)
确实对于create table我们有一个好结果:
exports.up = function(knex, Promise) {
return knex.schema.createTable("foo", function(tb){
tb.date("xpto").notNullable().defaultTo(knex.fn.now());
})
};
exports.down = function(knex, Promise) {
return knex.schema.dropTable("foo");
};
但是对于alter table操作,它给我们一个错误。
如果可能,请尝试以下操作:
进行迁移以删除当前表:
exports.up = function(knex, Promise) {
return knex.schema.dropTable("foo");
};
exports.down = function(knex, Promise) {
return knex.schema.createTable("foo", function(tb){
tb.date("xpto").notNullable().defaultTo(knex.fn.now());
});
};
然后进行第二次迁移以再次创建表。
我建议采用这种方法,因为如果项目安装在生产环境中,那么改变已执行的迁移将不是一种健康的方法。
希望它有所帮助。更新:
完全相同的alter table在postgresql上完美运行。