我正在使用sqlite。我需要创建一个日期
列不可为空
。我尝试了一下,但不起作用。
return knex.schema.table("my_table", (table) => {
table.date("important_day").notNullable().defaultTo(knex.fn.now());
});
使用此代码,我收到此错误消息:
Unhandled rejection Error:
SQLITE_ERROR
: Cannot add a column with non-constant default. Knex:warning - migrations failed with error: alter tableminisermao
add columndiaminisermao
date not null defaultCURRENT_TIMESTAMP - SQLITE_ERROR
: Cannot add a column with non-constant default
如何解决?
最佳答案
确实,对于创建表,我们有一个不错的结果:
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");
};
但是对于更改表操作,它会给我们一个错误。
如果可能,请尝试以下操作:
进行迁移以删除当前表:
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());
});
};
然后进行第二次迁移以再次创建表。
我建议采用这种方法,因为如果该项目安装在生产环境中,那么更改已执行的迁移并不是一个健康的方法。
希望有帮助。
更新:
同样的更改表在 postgresql 上完美运行。
关于javascript - 如何创建不可为空的日期列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41733085/